岛屿的缘分

Description

人和人的相识是一种缘分,其实人有幸到某地也是一种缘分。某风景优美的K小岛的缘分和其他景点的缘分来得不一般,K岛上有一个石碑刻上了两个很大很大的整数x和y,和一个正整数K,后面写道:“谁能准确的写出x和y的乘积中最右边的k位数(如果乘积不足K位则在左边用“0”补足K位),他就是和K小岛有缘分的人”,李先生到了K小岛,他马上叫他的秘书算一算,写出x和y的乘积中最右边的k位数,看看李先生和他的秘书是否和K小岛有缘分。现在也请你完成这个工作(注意: 如果乘积不足K位则在左边用“0”补足K位)。

Input

从文件b.in读入数据,文件中共有三行,第一行是一个位数不大于120的正整数x,第二行是一个位数不大于120的正整数y,第三行是一个正整数K(1=< K <=250)。

Output

结果输出到文件b.out中,只有一行,就是x和y的乘积中最右边的k位数。

Sample Input

输入输出样例1:
b.in
30
60
3

输入输出样例2:
b.in
12
13
5
Sample Output

输入输出样例1:
b.out
800

输入输出样例2:
b.out
00156

.
.
.
.
.
分析
高精乘

.
.
.
.
.
程序:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int a[200],b[200],c[1000],k,l1,l2;
string s,t,r;

int main()
{
	freopen("b.in","r",stdin);
	freopen("b.out","w",stdout);
    cin>>s>>t;
    scanf("%d",&k);
    l1=s.size();
    for (int i=l1;i>=1;i--)
        a[l1-i+1]=s[i-1]-'0';    

    l2=t.size();
    for (int i=l2;i>=1;i--)
        b[l2-i+1]=t[i-1]-'0';

    for (int i=1;i<=l1;i++)
        for (int j=1;j<=l2;j++)
            {
                c[i+j-1]=a[i]*b[j]+c[i+j-1];
                c[i+j]+=c[i+j-1]/10;
                c[i+j-1]%=10;
            }
    int i=l1+l2;
    while (c[i]>10) 
    {
        c[i+1]=c[i]/10;
        c[i]%=10;
		i++;
    }
    for (int i=k;i>=1;i--)
        printf("%d",c[i]);
    fclose(stdin);
    fclose(stdout);
    return 0;
}
posted @ 2019-05-01 12:43  银叶草  阅读(124)  评论(0编辑  收藏  举报
Live2D