| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 553 人关注过本帖
标题:一个老生常谈的程序,求解
只看楼主 加入收藏
jianweichief
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2007-7-18
收藏
 问题点数:0 回复次数:5 
一个老生常谈的程序,求解
实现:7896541236995233+7889255458625215,也就是大数相加,一直没整明白,望赐教。

谢谢!
搜索更多相关主题的帖子: 求解 
2007-07-19 11:23
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
光算你这个式子不考虑其他,直接用整型数组吧。
就是满10进1,用循环一位一位的加。
当然,可可以分割下数组,每几位相加进位(注意越界)。


Fight  to win  or  die...
2007-07-19 11:42
Jackzdong
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2006-6-1
收藏
得分:0 

#include <iostream>
using namespace std;
#define MAX 10000 //可以计算10000位
void num_read(int *a) //逆向读取数据 a[0]为低位
{
int len,i;
char temp[MAX];
scanf("%s",&temp);
len=strlen(temp);
for(i=len;i>=1;i--)
a[i]=temp[len-i]-'0';
a[0]=len;
}

void bigplus(int a[],int b[],int c[]) //大整数加法
{
int i,len;
len=(a[0]>b[0]?a[0]:b[0]);
for(i=0;i<=len+1;i++) //将数组清0
c[i]=0;
int len1=(a[0]<b[0]?a[0]:b[0]);
for (i=1;i<=len1;i++) //计算每一位的值
{
c[i]+=(a[i]+b[i]);
while (c[i]>=10)
{
c[i]-=10; //大于10的取个位
c[i+1]++; //高位加1
}
}
bool tag = a[0]>b[0];
for(i=len1+1;i<=len;i++)
{
if(tag)
c[i]=a[i];
else
c[i]=b[i];
while (c[i]>=10)
{
c[i]-=10; //大于10的取个位
c[i+1]++; //高位加1
}
}
if (c[i]>0)
len++;
c[0]=len; //c[0]保存结果数组实际长度
for (i=len;i>=1;i--)
{
printf("%d",c[i]);
}
printf("\n");
}
int main()
{
int a[MAX],b[MAX],c[MAX];
num_read(a);
num_read(b);
bigplus(a,b,c);
return 0;
}
ACM上经常遇到的一个函数
前几天刚写的一个, 刚学习
ACM写的不是很好


[此贴子已经被作者于2007-7-20 10:16:48编辑过]

2007-07-20 10:14
jianweichief
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2007-7-18
收藏
得分:0 
呵呵,有短一点的没,题目这么麻烦啊,劳驾诸位高手了

2007-07-22 10:01
jianvsgao
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-7-5
收藏
得分:0 

不是core C++

2007-07-22 16:40
wingyip
Rank: 1
等 级:新手上路
威 望:2
帖 子:119
专家分:0
注 册:2007-7-16
收藏
得分:0 

什么叫 core c++


2007-07-23 08:45
快速回复:一个老生常谈的程序,求解
数据加载中...
 
   



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

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