本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
代码长度限制
16 KB
时间限制
100 ms
内存限制
64 MB
需要注意的是所给数据为正整数,所以无需考虑为0或者为负数的情况 ,数据长度远超long long int所能存储的最大限度,所以考虑采用数组形式存储并计算,数据输入考虑接收为字符串类型,代码如下
//不超过1000位,最好还是直接用数组来存储计算
#include<stdio.h>
#include<string.h>
#define Max 1003
#define EOF -1
int main(){
char num[Max],key;
int num2[Max],number[Max];
gets(num);
num[strlen(num)-2]='\0';
key=atoi(&num[strlen(num)+1]);//注意前面已经将空格替换成了\0,所以num数组的长度已经缩短,所以需要加一,此处atoi函数是标准库函数,作用是将字符串转换成整数类型
for(int i=0;i<Max;i++){//此处作用是对数组进行初始化处理,将字符串转换成为int数组存放
number[i]=num2[i]=EOF;
if(i<strlen(num))
num2[i]=num[i]-'0';
}
int remainder=0;
for(int i=0;i<Max;i++){
if(num2[i]==EOF)
break;
number[i]=(remainder*10+num2[i])/key;
remainder=(remainder*10+num2[i])%key;
}
if(number[0]||((!number[0])&&number[1]==EOF))//这里目的是如果第一位为0并且第二位不存在则输出0,若第二位存在则不输出
printf("%d",number[0]);
for(int i=1;i<Max;i++){
if(number[i]==EOF)
break;
printf("%d",number[i]);
}
printf("\040%d\n",remainder);
return 0;
}
运行结果: