可以实现两个1000位以内的数的加法,位数增加可以修改程序。
下面是2010年华中科技大学计算机研究生机试真题,在九度OJ上题目编号为1198.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int c = 0;
char add(char ch1, char ch2, int n)
{
int sum;
sum = ch1 + ch2 - 96 + n;
c = sum / 10;
return sum%10+48;
}
int main()
{
char a[1010],b[1010],sum[1010];
int i,j,k,r,lena,lenb;
while (scanf("%s%s",a,b) != EOF)
{
memset(sum,0,1010);
lena = strlen(a);
lenb = strlen(b);
i=lena-1;
j=lenb-1;
k=0;
c=0;
while(i>=0 && j>=0)
{
sum[k++]=add(a[i],b[j],c);
i--;
j--;
}
while(i>=0)
{
sum[k++]=add(a[i],'0',c);
i--;
}
while (j>=0)
{
sum[k++] = add('0',b[j],c);
j--;
}
sum[k++]=c+48;
if (sum[k-1] != '0')
printf("%c",sum[k-1]);
for(r=k-2;r>=0;r--)
{
printf("%c",sum[r]);
}
printf("\n");
}
return 0;
}
/**************************************************************
Problem: 1198
User: yuanjilai
Language: C
Result: Accepted
Time:120 ms
Memory:908 kb
****************************************************************/
用堆栈来做比较方便:
#include <iostream>
#include <list>
using namespace std;
class LLStack
{
public:
LLStack()//构造函数
{
}
void clear()//清空栈
{
lst.clear();//清空容器
}
bool isEmpty() const//判断栈是否为空
{
return lst.empty();//容器是否为空
}
int& topEl()//取栈顶元素
{
return lst.back();//取容器最后一个元素
}
int pop()//出栈
{
int el = lst.back();//取容器最后一个元素
lst.pop_back();//删除最后一个元素
return el;
}
void push(const int& el)//进栈
{
lst.push_back(el);//在容器的最末尾增加一个元素
}
private:
list<int> lst;
};
int main()
{
char ch1[100],ch2[100];
LLStack stack1,stack2,stack3;
int add;//进位
while (cin>>ch1>>ch2)
{
add = 0;
stack1.clear();
stack2.clear();
stack3.clear();
for (int i = 0; ch1[i] != '\0'; i ++)
stack1.push(ch1[i] - 48);
for (int j = 0; ch2[j] != '\0'; j ++)
stack2.push(ch2[j] - 48);
while (!stack1.isEmpty() && !stack2.isEmpty())
{
int temp1 = stack1.pop();
int temp2 = stack2.pop();
stack3.push(( temp1 + temp2 + add )%10);
add = (temp1 + temp2 + add )/10;
}
while (!stack1.isEmpty())
{
int temp1 = stack1.pop();
stack3.push(( temp1 + add )%10);
add = (temp1 + add )/10;
}
while (!stack2.isEmpty())
{
int temp2 = stack2.pop();
stack3.push(( temp2 + add )%10);
add = ( temp2 + add )/10;
}
if(add)
stack3.push(add);
while (!stack3.isEmpty())
cout<<stack3.pop();
cout<<endl;
}
return 0;
}