首页 > 学院 > 开发设计 > 正文

1017. A除以B (20)-大整数运算

2019-11-10 17:08:39
字体:
来源:转载
供稿:网友

本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。

输入格式:

输入在1行中依次给出A和B,中间以1空格分隔。

输出格式:

在1行中依次输出Q和R,中间以1空格分隔。

输入样例: 123456789050987654321 7 输出样例: 17636684150141093474 3

法1:#include<cstdio>#include<cstring>int main(){ int a[1010],q[1010],b; char s[1010]; scanf("%s %d",s,&b); int len=strlen(s); for(int i=0;i<len;i++){ a[i]=s[i]-'0'; } int left=0,j=0;//left表示余数 for(int i=0;i<len;i++){ left=left*10+a[i]; if(j!=0||left/b!=0)//if(!(j==0&&left/b==0)) { q[j++]=left/b; left=left%b; } } if(j==0){ PRintf("0"); }else{ for(int i=0;i<j;i++){ printf("%d",q[i]); } } printf(" %d/n",left); return 0;}法2:#include<cstdio>#include<cstring>struct bign{ int d[1010]; int len; bign(){ memset(d,0,sizeof(d)); len=0; }};bign change(char str[]){ bign a; a.len=strlen(str); for(int i=0;i<a.len;i++){ a.d[i]=str[a.len-1-i]-'0'; } return a;}bign divide(bign a,int b,int& r){ bign c; c.len=a.len; for(int i=a.len-1;i>=0;i--){ r=r*10+a.d[i]; if(r<b) c.d[i]=0; else{ c.d[i]=r/b; r=r%b; } } while(c.len>=2&&c.d[c.len-1]==0){ c.len--; } return c;}void print(bign a){ for(int i=a.len-1;i>=0;i--){ printf("%d",a.d[i]); }}int main(){ char str1[1010]; int b,r=0; scanf("%s%d",str1,&b); bign a=change(str1); print(divide(a,b,r)); printf(" %d",r); return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表