这是大数,或者字符串处理的题目。应该就是大数的除法,一般的大数除了刻印用字符串来做之外,也是可以用整形数组来做的,比如说这题,就是可以的。很多题的解法都是类似的。我处理的方法是输入还是按照字符串的方式但是处理的时候是按照数字来处理的,因为我们只需要将原来很庞大的字符串a分割来做。
思路:还是按照数学出发那样来做,其实你完全可以从第一位往后走for(i=0;i<n;i++)....就是从一开始就判断如果a[i]<b(这里的b是除数),那么就有:
(1)a[i]=a[i]*10+a[i+1],当然这个i+1的变化就看你自己了,
(2)如果大的话就入余数a[i]=a[i]%b,否则重复1,。。。。之后就可以直接走到最后,想着简单,算法的实现也不是很难,就是保留余数,和for循环就ok了。
#include<iostream> using namespace std; #include<cstdlib> char a[1005],c[10],b[10]; Big() { int a1,b1,a2,b2,k,num; a1=strlen(a); //a的长度 b1=strlen(b); b2=atoi(b); //数字b的转换 if(a1<=b1) { a2=atoi(a); num=a2%b2; } else { for(k=0;k<b1;k++) c[k]=a[k]; c[k]='\0'; a2=atoi(c); while(k<=a1-1) { if(a2>=b2) { num=a2%b2; a2=num; // cout<<num<<" "<<"hao"; } else { a2=a2*10+a[k]-'0'; if(k==(a1-1)) { num=a2%b2; break; } k++; // cout<<num<<" "<<"huai"; } } } return num; } int main() { int k; while(cin>>a>>b) { k=Big(); cout<<k<<endl; } return 0; }