PAT(乙级)1017
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 = '\0';
return num;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· 手把手教你更优雅的享受 DeepSeek
· AI工具推荐:领先的开源 AI 代码助手——Continue
· 探秘Transformer系列之(2)---总体架构
· V-Control:一个基于 .NET MAUI 的开箱即用的UI组件库
· 乌龟冬眠箱湿度监控系统和AI辅助建议功能的实现