您的位置:首页 > 编程语言 > C语言/C++

Add Two Numbers

2016-03-06 17:05 507 查看
C++的书刚看到第五章,想做做leetcode上的题目,其中第二题描述如下:

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)

Output: 7 -> 0 -> 8

根据题设描述,类似于三位数的加法。受这个题目的启发编写了如下程序,自娱自乐一下。因为本程序没有用到类,希望各位编程高手不要见笑。

#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> vec1,vec2;
int vecint1,vecint2;
int cnt;
cout<<"Please input the number: "<<endl;
cin>>cnt;
cout<<"Please input the first number array : "<<endl;

while((vec1.size()<cnt)&&(cin>>vecint1))
{
vec1.push_back(vecint1);
if(vec1.size()==cnt)
{
//cin.clear();
//cin.ignore(100,'\n'); //忽略规定数目之后的100个字符
fflush(stdin);          //忽略超过cnt数目之后的所有字符
cout<<"你输入的数字达到或超过了规定数目:"<<cnt<<endl;
break;
}
}
cout<<"Please input the second number array : "<<endl;
while((vec2.size()<cnt)&&(cin>>vecint2))
{
vec2.push_back(vecint2);
if(vec2.size()==cnt)
{
fflush(stdin);
break;
}
}

vector<int> currsum;//sum,
int *sum = new int[cnt];
int single,tens;
for(int i=0;i<cnt;++i)
currsum.push_back(vec1[i]+vec2[i]);

cout<<"Mid Currsum :"<<endl;
for(int i=0;i<cnt-1;++i)
cout<<currsum[i]<<"->";
cout<<currsum[cnt-1]<<endl;

for(int i=0;i<cnt-1;++i)
{
if(currsum[i]>=10)
{
currsum[i+1]+=1;
single = currsum[i]%10;
sum[i] = single;
}
else
sum[i] = currsum[i];
}
if(currsum[cnt-1]<10)
sum[cnt-1] = currsum[cnt-1];
else
{
single = currsum[cnt-1]%10;
sum[cnt-1]=single;
}

cout<<"Final Result:"<<endl;
for(int i=0;i<cnt-1;++i)
{
cout<<sum[i]<<"->";
}
cout<<sum[cnt-1]<<endl;

system("pause");
return 0;
}


在编写以上代码的过程中遇到一些问题,总结一下:

1、while循环中&&左右的两个部分不是同时执行的,而是先执行前者,再执行后者;

2、对于vector型变量要用push_back()函数进行赋值,而不能用vec[i]这样的形式,vec[i]的形式会报错;

3、当输入第一个vector变量的时候,如果输入的数目大于事先给定的数目cnt,那么多余cnt的部分数据则会被划分倒第二个vector变量中。因此在程序中要加上fflush(stdin)用来清空输入的变量,这样第二个进行输入的时候则不会出现这样的问题。

4、关于fflush的用法见fflush

5、也可以用cin.ignore(100,’\n’)来进行表示,但这样的局限是只忽略了给定数目的字符或者数字,当大于100时则会有问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++