本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
代码1:a只有1位数字 和 第一位数字大于除数的两个个例混在循环里
#include <stdio.h>
int main()
{ //数字过长无法存储 只能用字符串 计算只需从头开始大于除数的1位或两位即可
char a[10001];int b;
scanf("%s %d",a,&b);
int r = a[0] - '0',temp = -1; //初始值不能为0 后面赋值为余数可能为0
for (int i=0;!(a[i+1]=='\0' && temp!=-1);) //temp可能为0会无限循环
{ //当前不是最后一个字符且已经进入过循环 如果是1位数没有temp!=-1不会进入循环
temp = r; //等于余数
if (temp < b && a[i+1] != '\0') //当前1位小于除数 并且不是最后一位时 只有第一次可能不会进入该分支
{
i++;
temp = temp*10 + a[i]-'0'; //如果当前取出的数小于除数 向后再取一位
}
r = temp%b; //余数
printf("%d",temp/b); //循环输出每一位商
}
printf(" %d\n",r);
}
代码2:区分出了两个个例
#include <stdio.h>
int main()
{ //数字过长无法存储 只能用字符串 计算只需从头开始大于除数的1位或两位即可
char a[10001];int b;
scanf("%s %d",a,&b);
int r = a[0] - '0',temp = -1; //初始值不能为0 后面赋值为余数可能为0
if (r>b) //第一个数字大于除数时先输出商的第一位
{
printf("%d",r/b);
r = r%b;
}
else if(r<b && a[1]=='\0') //如果只有1位数字 并且小于除数 直接输出0
printf("0");
for (int i=1;a[i]!='\0';i++)
{
temp = r; //等于余数
temp = temp*10 + a[i]-'0'; //当前取出的数一定小于除数 向后再取一位
r = temp%b; //余数
printf("%d",temp/b); //循环输出每一位商
}
printf(" %d\n",r);
}