• P1303 A*B Problem


    题目描述

    求两数的积。

    输入输出格式

    输入格式:

    两行,两个数。

    输出格式:

    输入输出样例

    输入样例#1: 
    1 
    2
    输出样例#1: 
    2

    说明

    每个数字不超过10^2000,需用高精

    哇高精a*b也太容易错了吧??

    要注意的点如下:

    1.0的问题!要特判;

    2.注意最高位的进位。无论是乘还是加都要注意;

    3.这种题查错不好查,可以先试一些特殊的数据(比如有0的),还找不出来的话大概就要手算了。。。

     1 #include <iostream>
     2 #include <cmath>
     3 #include <cstring>
     4 #include <cstdio>
     5 #include <cstdlib>
     6 #include <algorithm>
     7 
     8 using namespace std;
     9 char a[5000],b[5000];
    10 int aans[5000],ans[5000];
    11 int main()
    12 {
    13     cin>>a>>b;
    14     int len1=strlen(a),len2=strlen(b);
    15     if(a[0]=='0' || b[0]=='0') {printf("0");return 0;}
    16     for(int i=0;i<len1/2;i++)
    17     {
    18         char tmp;
    19         tmp=a[i];
    20         a[i]=a[len1-i-1];
    21         a[len1-i-1]=tmp;
    22     }
    23     for(int i=0;i<len2/2;i++)
    24     {
    25         char tmp;
    26         tmp=b[i];
    27         b[i]=b[len2-i-1];
    28         b[len2-i-1]=tmp;
    29     }
    30     //----------------------
    31     for(int i=0;i<len2;i++)
    32     {
    33         int s=b[i]-'0';
    34         if(b[i]=='0') s=0;
    35         int jw=0,sum=0;
    36         for(int j=0;j<len1;j++)
    37         {
    38             int tmp;
    39             if(a[j]=='0') tmp=0;
    40             else tmp=a[j]-'0';
    41             sum=tmp*s;
    42             sum+=jw;
    43             jw=sum/10;
    44             ans[j]=sum%10;
    45         }
    46         if(jw!=0) ans[len1]=jw;
    47         int ssum=0,jjw=0;
    48         for(int j=0;j<=len1;j++)
    49         {
    50             ssum=aans[j+i]+ans[j]+jjw;
    51             jjw=ssum/10;
    52             aans[j+i]=ssum%10;
    53         }
    54         //if(jjw!=0) aans[len1+i]=jjw;
    55     /*    for(int j=0;j<=len1+i;j++) cout<<aans[j];
    56         cout<<endl;*/
    57         memset(ans,0,sizeof(ans));
    58     }
    59     bool ok=true;
    60     for(int i=len1+len2;i>=0;i--)
    61     {
    62         if(ok && aans[i]==0) continue;
    63         else if(ok && aans[i]!=0) ok=false;
    64         printf("%d",aans[i]);
    65     }
    66     return 0;
    67 }
    P1303
  • 相关阅读:
    Picture
    wolf and rabbit
    十进制转换为二进制(一直不会算的)
    各种排序
    折线分割平面
    字母数
    1001
    Primes
    大数的减法神秘数
    转: Windows Internet WinINet 学习笔记(2)
  • 原文地址:https://www.cnblogs.com/YXY-1211/p/9125468.html
Copyright © 2020-2023  润新知