int a,b,c 请写函数实现C=a+b ,不可以改变数据类型,如将c改为long int,关键是如何处理溢出问题. 求分析

int a,b,c 请写函数实现C=a+b ,不可以改变数据类型,如将c改为long int,关键是如何处理溢出问题
bool add (int a, int b,int *c)
{
*c=a+b;
return (a>0 && b>0 &&(*c<0 && b<0 &&(*c>a || *c>b)));
}

第1个回答  推荐于2018-04-11
bool add(int a,int b,int *c)
{
*c=a+b;
if(a>0&&b>0&&*c<0)return fale;
if(a<0&&b<0){
a=-a;b=-b;
if((a+b)<0)return fale;
}
return true;
}

两个数相加,溢出的会被舍弃;
怎么相加,数在内存里是啥值就直接相加(二进制相加),没减的,因为cpu只会加;
至于内存里的情况,发我当时的笔记给你:
其实所有数值都是以补码的形式储存在内存中,区别在于内存解释上,比如用unsigned int,int,short,long解释;

例如:int m=7;7的补码为0111,那么就直接把0111放进内存m低位中,其它位以符号位0补足;

unsigned int n=-7;-7的补码为1001,把1001放进n低位中,其它以符号位1补足,这里
用无符号数解释内存n,那么执行cout<<n;就会输出11111111 11111111 11111111 11111001
的十进制数;如果用符号数解释即int n=-7;那么就输出-7(11111111 11111111 11111111 11111001原码为10000000 00000000 00000000 00000111,最高位为符号位)

用 = 号赋值就是内存段复制到内存段的操作;

符号‘-’,实际就是按位取反然后加1;例如:-7,意思是把111按位取反加1得...1001其它以符号位1补足;也即
-7的补码本回答被提问者和网友采纳
第2个回答  2011-05-18
高精度加法:

高精度整数加法。输入两个不超过100位的正整数,求它们的和。
#include<fstream>
#include<string>
using namespace std;
const int M=101;
string s1,s2;
int main()
{
int shu1[M],shu2[M],shu[M],i=0,l1=0,l2=0,L1=M-1,L2=M-1,l=0,jin=0;
ifstream fin("input.txt");
fin>>s1>>s2;
fin.close();
l1=s1.length();
l2=s2.length();
if(l1>=l2)
{
l=l1;
for(i=0;i<l1;i++)
shu1[l1-i-1]=s1[i]-48;
for(i=0;i<l2;i++)
shu2[l2-i-1]=s2[i]-48;
}
else
{
l=l2;l2=l1;l1=l;
for(i=0;i<l1;i++)
shu1[l1-i-1]=s2[i]-48;
for(i=0;i<l2;i++)
shu2[l2-i-1]=s1[i]-48;
}
for(i=0;i<l;i++)
{
if(l1>=l2)
{
if(l1>=i+1)
shu[i]=shu1[i];
if(l2>=i+1)
shu[i]+=shu2[i];
}
shu[i]+=jin;
if(shu[i]>9)
{
jin=1;
shu[i]=shu[i]%10;
}
else
jin=0;
}
ofstream fout("output.txt");
if(jin>0)
fout<<jin;
for(i=l-1;i>=0;i--)
fout<<shu[i];
fout.close();
return 0;
}

原来做的程序,求采纳
第3个回答  2011-05-18
没弄过,不太清楚