| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 549 人关注过本帖
标题:大数相加
只看楼主 加入收藏
a99875984
Rank: 2
等 级:论坛游民
帖 子:188
专家分:24
注 册:2012-2-11
结帖率:94.64%
收藏
已结贴  问题点数:10 回复次数:8 
大数相加
请问下像112233445566778899这么大的数怎么相加啊?

[ 本帖最后由 a99875984 于 2012-7-20 17:27 编辑 ]
2012-07-20 09:24
fansstar
Rank: 1
等 级:新手上路
帖 子:18
专家分:3
注 册:2012-7-19
收藏
得分:3 
你可以用数组来存,可以是字符的的也可以使数字的
2012-07-20 09:44
a99875984
Rank: 2
等 级:论坛游民
帖 子:188
专家分:24
注 册:2012-2-11
收藏
得分:0 
回复 2楼 fansstar
不行啊,输入可以,但输出就成了-858993这样的数字了
2012-07-20 09:54
fansstar
Rank: 1
等 级:新手上路
帖 子:18
专家分:3
注 册:2012-7-19
收藏
得分:0 
回复 3楼 a99875984
你是用数组的吧,记得初始化
2012-07-20 20:08
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:3 
一个 char 存不下很多东西,才有的字符串这个概念。一个 int 如果存不下太大的数,也可以用数组来表示。二楼说的是这个意思。
楼主先自己百度一下有关大数的问题。先有个基本认识,再来讨论。
2012-07-20 21:17
a99875984
Rank: 2
等 级:论坛游民
帖 子:188
专家分:24
注 册:2012-2-11
收藏
得分:0 
那请问下,这个程序有些地方什么意思啊?我没碰过这些语句
程序代码:
#include <iostream>
#include <string>
#include <stack>

using namespace std;

string Add(string Str1, string Str2)
{

 // 操作数1
 stack<int>S1;

 // 操作数2
 stack<int>S2;

 // 结果
 stack<int>S3;


 int i, r, last = 0;

 for(i=0; i<Str1.size(); i++)//str1.size()什么意思啊>
  S1.push(Str1[i] - '0');//这个语句push是干嘛用的?括号了的那个是什么意思》
 for(i=0; i<Str2.size(); i++)
  S2.push(Str2[i] - '0');


 while(!S1.empty() && !S2.empty())//这个呢?判断条件是什么啊?
 {
  r = S1.top() + S2.top() +last;//这个TOP是什么
  S3.push(r%10);
  last = r/10;
  S1.pop();
  S2.pop();//这个POP呢?
 }


 if(!S1.empty())

 {
  while(!S1.empty())
  {
   r = S1.top() + last;
   S3.push(r%10);
   last = r/10;
   S1.pop();
  }

 }

 else if(!S2.empty())

 {
  while(!S2.empty())
  {
   r = S2.top() + last;
   S3.push(r%10);
   last = r/10;
   S2.pop();
  }

 }


 if(last != 0)
  S3.push(last);

 string result;

 while(!S3.empty())

 {
  result += S3.top() + '0';
  S3.pop();

 }


 return result;
}

int main(int argc, char* argv[])
{

 int i, N;

 cin>>N;

 string a, b;

 string* answer = new string[N];

 for(i=0; i<N; i++)

 {
  cin>>a>>b;
  answer[i] = Add(a, b);

 }


 for(i=0; i<N; i++)

 {
  cout<<answer[i]<<endl;

 }

 delete[] answer;

 return 0;
}

2012-07-21 12:20
jiantiewen
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:61
专家分:307
注 册:2012-6-22
收藏
得分:3 
#include <iostream>
 #include <string>
 #include <stack>

using namespace std;

string Add(string Str1, string Str2)
 {
// 操作数1
 stack<int>S1;
// 操作数2
 stack<int>S2;
// 结果
 stack<int>S3;

int i, r, last = 0;
for(i=0; i<Str1.size(); i++)//str1.size()什么意思啊>  str1字串的字数
   S1.push(Str1[i] - '0');//这个语句push是干嘛用的?括号了的那个是什么意思》  Str1[i]-'0' 是用来算出这个字符(一个数字字符)代表的实际数值。把这个值push入S1,S1作为数据堆栈,可把S1理解成数组。
 for(i=0; i<Str2.size(); i++)
   S2.push(Str2[i] - '0');

while(!S1.empty() && !S2.empty())//这个呢?判断条件是什么啊?  条件就是S1和S2同时都存有数据时。
 {
   r = S1.top() + S2.top() +last;//这个TOP是什么 。。。。。。。我真的无语了。
   S3.push(r%10);
   last = r/10;
   S1.pop();
   S2.pop();//这个POP呢?
 }

if(!S1.empty())
 {
   while(!S1.empty())
   {
    r = S1.top() + last;
    S3.push(r%10);
    last = r/10;
    S1.pop();
   }
 }
else if(!S2.empty())
 {
   while(!S2.empty())
   {
    r = S2.top() + last;
    S3.push(r%10);
    last = r/10;
    S2.pop();
   }
 }

if(last != 0)
   S3.push(last);
string result;
while(!S3.empty())
 {
   result += S3.top() + '0';
   S3.pop();
 }

return result;
 }

int main(int argc, char* argv[])
 {
int i, N;
cin>>N;
string a, b;
string* answer = new string[N];
for(i=0; i<N; i++)
 {
   cin>>a>>b;
   answer[i] = Add(a, b);
 }

for(i=0; i<N; i++)
 {
   cout<<answer[i]<<endl;
 }
delete[] answer;
return 0;
 }

push、pop、top都是堆栈用到的,楼主还是先去了解“堆栈”是什么?


[ 本帖最后由 jiantiewen 于 2012-7-21 21:05 编辑 ]
2012-07-21 21:03
jiantiewen
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:61
专家分:307
注 册:2012-6-22
收藏
得分:0 
楼主刚开始问的大数的运算问题更好办,看这个:
程序代码:
#include <iostream>

using namespace std;
int main()
{
    __int64 ll0=112233445566778899;
    __int64 ll1=223344556677889900;
    cout<<ll0<<"+"<<ll1<<"="<<ll0+ll1<<endl;

    return 0;
}
2012-07-21 21:11
a99875984
Rank: 2
等 级:论坛游民
帖 子:188
专家分:24
注 册:2012-2-11
收藏
得分:0 
回复 8楼 jiantiewen
如果要输入呢?
2012-07-22 21:33
快速回复:大数相加
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018972 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved