nyoj 485 A*B Problem
A*B Problem
时间限制:1000 ms | 内存限制:65535 KB
难度:2
- 描述
-
设计一个程序求出A*B,然后将其结果每一位相加得到C,如果C的位数大于等于2,继续将C的各位数相加,直到结果是个一位数k。
例如:
6*8=48;
4+8=12;
1+2=3;
输出3即可。
- 输入
- 第一行输入一个数N(0<N<=1000000),表示N组测试数据。
随后的N行每行给出两个非负整数m,n(0<=m,n<=10^12)。 - 输出
- 对于每一行数据,输出k。
- 样例输入
-
3 6 8 1234567 67 454 1232
- 样例输出
-
3 4 5
- 来源
- HDU改编
- 上传者
- szhhck
- 一个非常经典的题目
- 求数的根
- 直接模九就行了
- 看了出题题者的代码就知道 用gets() 比用scanf 快
-
View Code
1 2 3 #include<stdio.h> 4 #include<string.h> 5 int main(){ 6 char a[30]; 7 int n,m; 8 scanf("%d\n",&n); 9 while(n--){ 10 gets(a); 11 int i=0,c=0,d=0; 12 while(a[i]!=' ') c+=a[i++]-'0'; 13 while(a[++i]!='\0') d+=a[i]-'0'; 14 c*=d; 15 while(c>9) c=c%10+c/10; 16 printf("%d\n",c); 17 } 18 }
View Code1 2 /********************************* 3 / Problem: 4 / Algorithm: 5 / Language: C++ 6 / Compiler: MinGW 7 / Date: 12/08/11 8 / 9 / Copyright (C) wujianwei 10 / All rights reserved. 11 ********************************/ 12 13 #include <iostream> 14 #include <cstdio> 15 #include <cstring> 16 #include <cmath> 17 #include <vector> 18 #include <cstring> 19 #include <queue> 20 #include <stack> 21 #include <algorithm> 22 #include <set> 23 24 using namespace std; 25 26 #define INF 0x7fffffff 27 #define EPS 1e-12 28 #define MOD 1000000007 29 #define PI 3.141592653579798 30 #define N 100000 31 const int MAX=1<<28; 32 typedef long long LL; 33 //typedef __int64 INT 34 LL a,b; 35 36 int main() 37 { 38 int T; 39 scanf("%d",&T); 40 while(T--) 41 { 42 scanf("%lld%lld",&a,&b); 43 if(!a||!b) printf("0\n"); 44 else 45 { 46 int sum=(a%9)*(b%9)%9; 47 sum=(sum==0)?9:sum; 48 printf("%d\n",sum); 49 } 50 } 51 return 0; 52 } 53