您的位置:首页 > 大数据 > 人工智能

poj2305-Basic remains(进制转换 + 大整数取模)

2015-10-02 14:03 417 查看
  进制转换 + 大整数取模
一,题意:
  在b进制下,求p%m,再装换成b进制输出。
  其中p为b进制大数1000位以内,m为b进制数9位以内
二,思路:
  1,以字符串的形式输入p,m;
  2,转换:字符串->整数 十进制->b进制;
  3,十进制下计算并将整形结果转换成字符串形式,并倒序储存;
  4,输出。
三,步骤:
  1,输入p[],m[];
  2,字符串->整形 + 进制->b进制:
    i,进制转换语句:m2 = m2*b + m[j]-'0';
    ii,大整数取模,大整数可以写成这样的形式:
    12345 = ( ( (1 * 10+2) * 10+3) * 10+4) * 10+5
    如二进制数(1100)=( ( (1 * 2+1) * 2+0) * 2+0) (2表示进制数)
    为避免大数计算,进制转化时顺便求模
    p2 = (p2*b + p[i]-'0') % m2;
  3,转换并倒序储存: ans[k++] = p2%b + '0'; p2 /= b ;
  4,倒序输出

#include<iostream>
#include<string.h>
using namespace std;
const int N=1010;   //大数位数

int main(){
int b;       //进制数
while(cin>>b&&b){
char p
, m
, ans
;
int p2 = 0 , m2 = 0;  //定义用来储存十进制的被除数、除数
cin>>p>>m;
for(int j=0 ; j<strlen(m) ; j++){  //把n进制字符串除数转换为十进制数字除数
m2 = m2*b + m[j]-'0';
}
for(int i=0 ; i<strlen(p) ; i++){  //把n进制字符串被除数转换为十进制数字被除数
p2 = (p2*b + p[i]-'0') % m2;   //为避免大数计算,进制转化时顺便求模
}
if(!p2)
cout<<0<<endl;
else{
int k = 0;
while(p2){
ans[k++] = p2%b + '0'; //把10进制数 转换为 n进制字符串倒序并存入 P[] 中
p2 /= b;
}
for(int i = k-1 ; i >= 0 ; i--)
cout<<ans[i];
cout<<endl;
}
}
return 0;
}


View Code
版权声明:本文为博主原创文章,未经博主允许不得转载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: