リンクリストで表される2つの数字を追加しようとしています。だから私は3 - > 2-> 8と6-> 5-> 4という数字を挿入した。私は数字328と654を取得しようとし、2つを追加し、3番目のリストに挿入します。私は数を計算中にいくつかの問題に直面しています。ここにコードがあります。リンクリストを使用して2つの数字を追加する
#include<bits/stdc++.h>
using namespace std;
struct Node{
int data;
struct Node *next;
};
int flag=1;
void input(Node **head,int num)
{
Node *temp=(struct Node*)malloc(sizeof(struct Node));
temp->data=num;
if(!flag)temp->next=*head;
if(flag){temp->next=NULL;flag=0;}
*head=temp;
}
void add(Node *l1,Node *l2,Node *l3)
{
Node *cur1=l1;
Node *cur2=l2;
int size1=0,size2=0;
while(cur1!=NULL)
{
size1++;
cur1=cur1->next;
}
while(cur2!=NULL)
{
size2++;
cur2=cur2->next;
}
int i=size1-1,j=size2-1,sum1=0,sum2=0;
cur1=l1;cur2=l2;
cout<<i<<endl;
while(cur1!=NULL)
{
cout<<cur1->data<<"\t";
cout<<cur1->data*pow(10,i)<<"\t";
sum1=sum1+cur1->data*pow(10,i);
cout<<sum1<<endl;
i--;
cur1=cur1->next;
}
cout<<sum1<<endl;
while(cur2!=NULL)
{ cout<<cur2->data<<"\t";
cout<<cur2->data*pow(10,j)<<"\t";
sum2=sum2+cur2->data*pow(10,j);
cout<<sum2<<endl;
j--;
cur2=cur2->next;
}
cout<<sum2<<endl;
sum1+=sum2;
while(sum1!=0)
{
int r=sum1%10;
input(&l3,r);
sum1/=10;
}
cur1=l3;
while(cur1!=NULL)
{
cout<<cur1->data;
cur1=cur1->next;
}
}
int main()
{
Node *l1=NULL;
Node *l2=NULL;
Node *l3=NULL;
input(&l1,8);
input(&l1,2);
input(&l1,3);
flag=1;
input(&l2,4);
input(&l2,5);
input(&l2,6);
add(l1,l2,l3);
return 0;
}
私はこの問題は、切り捨てが原因である可能性があり、出力
2 //value of i
3 300 299 //cur1->data*pow(10,i) is initially 300 then becomes 299
2 20 319
8 8 327
327 //total sum which should be 328
6 600 599 //Same problem
5 50 649
4 4 653
653 //total sum which should be 654
980 //sum of 327 and 653
これはCかC++ですか? C++のように見えます。もしそうなら、それに応じてタグを編集してください。 – tonysdg
この例では、2つの数字の桁数が同じであることがわかりますが、一般的にはそうではありません。また、この例では、結果は入力と同じ桁数を持ちますが、出力は入力より1桁多くなります(たとえば、499と501を追加することを考慮してください)。あなたはキャリーを扱うためにバックトラックすることができなければなりません(499 + 501の場合、2回バックトラックし、結果の始めに新しい要素を追加する必要があります; 328 + 654では、 –
tonysdgに:申し訳ありません私は構造とCの考えを使用していました:そして、ジョナサンに:いいえ、私はリンクされている桁数が分かりません。あなたは気付いていないことはありません。これは私が変数size1とsize2のそれぞれのサイズを計算する理由です。そして、はい、私はそれをチェックアウトしました。異なるサイズのリストでも動作します。 –