题目:
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
思路:
首先,题目这句“A=B×Q+R”有点废话,哈哈哈哈
其次,A是不超过1000位的正整数,别说int类型,就是long long这个8字节的类型也远远存放不了1000位的正整数呀,所以,毫无疑问,用数组来存放。
最后,就是这么除的问题了,其实,我们数学上除法竖式是怎么运算的,这题就是怎么运算的。
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#define MAX 1010
/**
**A除以B
**@author Fhujinwu
*/
int main()
{
char a[MAX],v[MAX];//a存放被除数,v存放商
int b,n,k,rest,i;
scanf("%s%d",a,&b);
int len=strlen(a);
/*rest为每次除运算的余数,
**表示商的位数k初始化为0*/
rest=k=0;
for(i=0;i<len;i++)
{
n=10*rest+(a[i]-'0');
//printf("%d\n",n);
if(n>=b||i==len-1){//如果足够除或到达了各位,则可以进行除运算
v[k++]=n/b;
rest=n%b;
}else{
if(i!=0) //第一位不够时不补0,其他补零
v[k++]=0;
int n1=n*10+(a[++i]-'0');//高位乘10加上本位
//printf("%d\n",n);
v[k++]=n1/b;
rest=n1%b;
}
}
for(i=0;i<k;i++)
printf("%d",v[i]);
printf(" %d",rest);
return 0;
}