1017. A除以B (20)
本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。输入格式:
输入在1行中依次给出A和B,中间以1空格分隔。
输出格式:
在1行中依次输出Q和R,中间以1空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
分析:1000位的正整数,没办法使用基本数据类型,因此只能以字符串的形式保存起来。需要解决的是怎么去除。
由于除数是一个一位正数,那么便每两位去除一次。这个除下来的商可能也极大。因此还是使用字符串保存。这里需要
把正数转成字符串,做法:*p2 = num / a + '0';这样转换一下。
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int fun(char *p1, char *p2, int a);
int main()
{
char num1[1000];
int b;
char num2[1000]; //商
int c; //余数
scanf("%s %d", num1, &b);
c = fun(num1,num2, b);
//PAT刷多了,我居然连这种情况都考虑的到。
if (strlen(num2) == 1) //商,只有一位的时候。
{
printf("%c", num2[0]);
}
else
{
if ('0' != num2[0])
{
printf("%c", num2[0]);
}
}
for (int i = 1; i < strlen(num2); i++)
{
printf("%c", num2[i]);
}
printf(" %d", c);
system("pause");
return 0;
}
int fun(char *p1, char *p2, int a)
{
int num = 0;
for (int i = 0; i < strlen(p1); i++)
{
num = num * 10 + p1[i] - '0';
*p2 = num / a + '0';
num = num % a;
p2++;
}
*p2 = ' ';
return num;
}