posts - 21,  comments - 9,  trackbacks - 0

大整数的加法。与以前高精度算法不同的是这次要一下子读入一个算式。然后简便的是,这次不用再交换顺序了,直接加。但是结果的判断稍微麻烦一点,要把开头的0都去掉才行。一下是我的代码。哎,刚开始把自己弄得挺混乱的,后来愤怒了,就把所有代码全删掉重新写了一遍。然后一次AC
#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
char a[12],b[12],c[12];
char temp[25];
bool add(char *first,char *second)
{
 int len1=strlen(first);
 int len2=strlen(second);
 first[len1]='0';
 int i,j;
 for(i=0;i<len2;i++)
 {
  second[i]-='0';
 }
 for(j=0;j<=len1;j++)
 {
  first[j]-='0';
 }
 for(i=0;i<len2;i++)
 {
  first[i]+=second[i];
 }
 for(i=0;i<len1;i++)
 {
  if(first[i]>=10)
  {
   first[i+1]+=first[i]/10;
   first[i]%=10;
  }
 }
 for(i=0;i<=len1;i++)
  first[i]+='0';
 while(first[len1]=='0')
  len1--;
 int len3=strlen(c);
 len3--;
 while(c[len3]=='0')
  len3--;
 if(len1!=len3)
  return false;
 while(len3>=0)
 {
  if(c[len3]!=first[len3])
   return false;
  len3--;
 }
 return true;
}
int main()
{
 while(gets(temp))
 {
  int kk=0;
  while(temp[kk]!='+')
  {
   a[kk]=temp[kk];
   kk++;
  }
  a[kk]='\0';
  kk++;
  int kkk=0;
  while(temp[kk]!='=')
  {
   b[kkk]=temp[kk];
   kk++;kkk++;
  }
  b[kkk]='\0';
  kk++;
  kkk=0;
  while(temp[kk]!='\0')
  {
   c[kkk]=temp[kk];
   kk++;kkk++;
  }
  c[kkk]='\0';

  int len1=strlen(a);
  int len2=strlen(b);
  if(len1==1&&len2==1&&a[0]=='0'&&b[0]=='0')
  {
   cout<<"True"<<endl;
   break;
  }
  if(len1>len2)
   if(add(a,b))
    cout<<"True"<<endl;
   else
    cout<<"False"<<endl;
  else
   if(add(b,a))
    cout<<"True"<<endl;
   else
    cout<<"False"<<endl;
 }
 return 0;

}

posted on 2010-08-19 16:26 崔佳星 阅读(1088) 评论(0)  编辑 收藏 引用 所属分类: POJ

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(1)

随笔分类

随笔档案

文章分类

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜