1樓:
你這個是大整數加減法運算嘛,c++有沒有學過,我這有一份現成的**,是有stl做的。
#include
#include
#include
using namespace std;
class bigintadd
;//整數輸入函式
istream & operator>>(istream & in,bigintadd & number)
}else //對應有符號數
}//for迴圈對應於含完整的位數的結點
for(size_t j=0;j::const_iterator iter=number.myint.begin();
//指向符號結點
if(*iter==-1)
out<<'-'; //若為負數則輸出「-」,正數不輸出符號
if(++iter==number.myint.end())
out<<0; //對應的數為零
else //輸出每個結點對應的數
else //兩數均為正數
sumsign=1;
}else //兩數符號不同
if(sign1*sign2<0)
if(sz1==sz2) //兩數位數相等
if((*iter1*sign1)+(*iter2*sign2)>0)//正數的絕對值大
}if(iter1==add1.myint.end())//絕對值相等
sumsign=1;
}else //兩數位數不等
if(sz1*sign1+sz2*sign2<0)//負數的位數多
else //正數的位數多
sumsign=1;
//確定運算結果的數值部分
list::reverse_iterator riter1=add1.myint.rbegin();
list::reverse_iterator riter2=add2.myint.rbegin();
//定義兩個反向迭代器
bigintadd sum; //儲存運算結果
short carry=0; //儲存進位值
//兩個數對應相加部分都不為零
else //運算值為正
sum.myint.push_front(temp);
riter1++;
riter2++;
}//add2的對應相加部分為零
while(riter1!=--add1.myint.rend())
else //運算值為正
sum.myint.push_front(temp);
riter1++;
}//add1對應相加部分為零
while(riter2!=--add2.myint.rend())
else //運算值為正
sum.myint.push_front(temp);
riter2++;
}if(carry!=0) //最後一個對應結點的運算結果有進位
sum.myint.push_front(carry);
while(*sum.myint.begin()==0)
sum.myint.pop_front();
//最高位對應結點沒有有效數值時,刪除該結點
sum.myint.push_front(sumsign);
//給結果連結串列加運算結果的符號
return sum;}
2樓:盛哥真帥
下面的太麻煩了吧。。。
關於C語言中的小問題,關於C語言中的一個小問題
其實我覺得你說得對,這個程式編的有些問題,你試著先輸出非空格的字元,程式會跳過 if c 這個判斷,然後lastc c後lastc中就存有你之前輸入的字元,你在輸入空格下次lastc c中就會存有空格。如果你先輸入空格,程式就會崩潰,應為lastc未定義,我用的vs2010已經試過了,你可以試試。望...
關於C語言中棧的問題
可以參考這個 include include include int errorflag typedef structstack int isnumeric char s 判斷 是不是數字 int empty stack s 判斷stack是不是為空 void init stack s 初始化 st...
關於c語言中結構體和檔案讀取輸出問題
當然要錯 改成 fread stu,sizeof stu 1,fp 一個讀資料是讀一條結構體的資料進去 不能分開讀 c語言中對結構體資料格式檔案進行讀取時,必須以二進位制格式開啟檔案,然後按結構體型別變數記憶體塊方式進行資料讀取,相關讀資料命令為fread 函式說明 include size t f...