Problem 1057 ab
Accept: 1241 Submit: 4015 Time Limit: 1000 mSec Memory Limit : 32768 KB
Problem Description
对于任意两个正整数a,b(0<=a,b<10000)计算ab各位数字的和的各位数字的和的各位数字的和的各位数字的和。
Input
输入有多组数据,每组只有一行,包含两个正整数a,b。最后一组a=0,b=0表示输入结束,不需要处理。
Output
对于每组输入数据,输出ab各位数字的和的各位数字的和的各位数字的和的各位数字的和。
Sample Input
2 3
5 7
0 0
Sample Output
8
5
Source
FZUPC Warmup 2005
解决方案
这是一道数论的题目有如下几个知识点:
(1) (a+b)%n = (a%n + b%n) % n;
(2) (a*b)%n = ((a%n)*(b%n)) % n;
(3) (a-b)%n = (a+(-b))%n = ( (a%n) + ((-b)%n) ) % n 若结果为负,加上n即可
(4) 一个数的各位数字分别是a1,a2…an ,如(4567)则
(a1a2…an)%9=(a1+a2+…+an)%9(5) 任何数除以9的余数等于各位数的和除以9的余数
由上面的结论就可以得出:计算ab各位数字的和的各位数字的和的各位数字的和的各位数字的和;
可以转化为(a*a*a*…)%9的结果,又有公式
(a*b)%n = ((a%n)*(b%n)) % n;
原文:https://blog.csdn.net/zhangzhilai8/article/details/8632319
#include"stdio.h"
#include"string.h"
int main()
{
int a, b;
while (scanf("%d%d", &a, &b)!=EOF&&a!=0&&b!=0)
{
int ans = 1;
for (int i = 0; i < b; i++)
{
ans = (ans*(a % 9)) % 9;
}
if (ans)
printf("%d\n", ans);
else
printf("9\n");
}
return 0;
}