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

/*
//代码一: 用cin cout TLE,改成scanf    948ms   降过
#include <cstdio>
#include <cstring>
#include <iostream>

using namespace std;

const int MAX = 15;


int Mult(char *s1, char *s2)
{
    int a[MAX], b[MAX], ans[MAX * 2];
    int len1 = strlen(s1);
    int len2 = strlen(s2);
    memset(ans, 0, sizeof(ans));
    for(int i = 0; i < len1; ++i)
        a[len1 - i - 1] = s1[i] - '0';
    for(int i = 0; i < len2; ++i)
        b[len2 - i - 1] = s2[i] - '0';
    for(int i = 0; i < len1; ++i)
        for(int j = 0; j< len2; ++j)
            ans[i + j] += a[i] * b[j];
    int sum = 0;
    for(int i = 0; i < len1 + len2; ++i)
    {
        if(ans[i]>9)
        {
            ans[i+1] += ans[i] / 10;
            ans[i] %= 10;
        }
        sum += ans[i];
    }
    return sum;
}

int main()
{
    int T;
    char s1[MAX], s2[MAX];
    
   // cin >> T;
    scanf("%d", &T);
    while(T--)
    {
       // cin >> s1 >> s2;
        scanf("%s%s", s1, s2);
        int sum = Mult(s1, s2);
        while(sum>9)
        {
            int t = sum;
            sum = 0;
            while(t)
            {
                sum += t % 10;
                t /= 10;
            }
        }
        //cout << sum << endl;
        printf("%d\n",sum);
    }
    return 0;
}
*/


//代码二:-----最优代码
/*
分析:对于一个整数n,设f(n)为n的各个位之和,有这样一个等式 n%9=f(n)%9;
证明:同余定理(a+b)%c=(a%c+b%c)%c,还有显然成立和k*(10^M)%9=k,代入到n%9=f(n)%9中,
即可得证n%9=f(n)%9是成立的。
还要注意我们所求的是一个一位数,而我们是对9取余的,当余数为0时,我们要的结果可能是0,可能是9。是0的情况,只有开始时两个乘数至少有一个为0。其他情况为9。
题解:http://acm.nyist.net/JudgeOnline/articles/?p=696#more-696
*/
#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
    int n;
    long long a,b;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%lld%lld",&a,&b);
        if(a==0 || b==0)
            printf("0\n");
        else
        {
            int tp=(a%9)*(b%9)%9;
            if(tp==0)
                tp=9;
            printf("%d\n",tp);
        }
    }
    return 0;
}

  

posted on 2012-11-13 16:41  可笑痴狂  阅读(946)  评论(0编辑  收藏  举报