zcmu1097:求余

Description

小学题目,给定除数和被除数,求余数

Input

多组测试数据,每组测试数据包含两个整数n,k(1<=n<=10^2000,1<=k<=1000)

Output

对于每组测试数据,输出n%k

Sample Input

12 4 12 5

Sample Output

0 2

解析:

我们通过逐位地将除数与被除数进行比较,以确定每一位的商和余数。通过循环处理每一位,我们最终得到了整个数的余数。

os:看到这是否会对解释产生疑问,实际上这是运用了长除法获取余数的方式,为什么不用寻常的方式取得余数呢?因为本题给的整数的范围已经超过了所有整型数据类型的范围,所以不得不利用长除法取余来帮助我们解决问题啦

何为长除法?长除法又是怎么获取余数的?

解释详见我的另外一篇文章:利用长除法取余数

代码

​
#include <stdio.h>
#include <string.h>

#define MAXN 2005

char n[MAXN];

int main() {
int k;// while (scanf("%s %d", n, &k) == 2)是一个循环,用于读取多组测试数据。scanf 函数用于从标准输入读取字符串 n 和整数 k,并返回成功读取的参数个数。当成功读取两个参数时,循环继续执行。
while (scanf("%s %d", n, &k) == 2) {
int len = strlen(n);
int r = 0; // 余数
for (int i = 0; i < len; i++) {
r = r * 10 + (n[i] - '0');// 将当前位的数字加到 r 中。由于 n[i] 是字符型,需要将其转换为对应的数字。这里使用了字符 '0' 的 ASCII 值来进行转换。
r %= k;
}//
printf("%d\n", r);
}
return 0;
}

​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值