1017 A除以B (20分)
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
本题三个坑
坑1:1000位的正整数即使使用unsigned long long 也不够长,只能用字符串解决
坑2:当商为多位并且第一位为0时(测试点0和2),分开输出(不能把首位的0也输出来了)
坑3:当商为一位且为0时(测试点1),正常输出(把0输出)即可
#include <stdio.h>
int main()
{
char a[1001],c[1001];
int b,n=1,yu=0;
scanf("%s %d",&a,&b);
c[0]=(a[0]-'0')/b+'0';
yu=(a[0]-'0')%b;
while(a[n]!='\0')
{
c[n]=(a[n]-'0'+yu*10)/b+'0';
yu=(a[n]-'0'+yu*10)%b;
n++;
}
c[n]='\0';
if(c[0]=='0' && c[1]!='\0') //注意商为0或商首位为0的情况
for(int i=1;i<n;i++)
printf("%c",c[i]);
else
printf("%s",c);
printf(" %d",yu);
return 0;
}
/*
本题三个坑
坑1:1000位的正整数即使使用unsigned long long 也不够长,只能用字符串解决
坑2:当商为多位并且第一位为0时(测试点0和2),分开输出(不能把首位的0也输出来了)
坑3:当商为一位且为0时(测试点1),正常输出(把0输出)即可
*/