91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在C++中利用string實現除法運算

發布時間:2021-03-23 16:42:59 來源:億速云 閱讀:570 作者:Leah 欄目:編程語言

怎么在C++中利用string實現除法運算?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

項目要點

1.大數指的是遠超long long int的數據

2.將大數用矩陣進行存儲,并通過矩陣實現運算

3.本人采用字符串進行存儲,應注意char的特點

比如:char a=161;

     cout<<(int)a;

此時會輸出-95,而不是161,char類型首個比特位是作為正負號的

除法,除法主要采用的還是筆算的思想,需要用到之前博客當中的減法函數minus

核心思想:比如861/21

                 先用86去減21 知道數值小于21時停止 也就是2

                 再添加上下一位,就變成了21

                 如果這個數大于等于21,則再用這個數減去它

                 21-21=0,記錄其減的次數,就是結果,該結果只保留了整數部分,余數會在之后的取模運算博客中講到

                 其實可以明顯看出余數就是減完所有可以減掉的21之后的數,也就是0

運行截圖及代碼如下:

怎么在C++中利用string實現除法運算

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
#define n 10
string dezero(string a)//用來去掉正數前面的0,也就是說可以輸入000001類似這樣的數字
{
 long int i;
 for(i=0;i<a.length();i++)
 {
 if(a.at(i)>48) break;
 }
 if(i==a.length()) return "0";
 a.erase(0,i);
 return a;
}
int judge(string a,string b)//判斷兩個正數的大小
{
 if(a.length()>b.length()) return 1;
 if(a.length()<b.length()) return -1;
 long int i;
 for(i=0;i<a.length();i++)
 {
 if(a.at(i)>b.at(i)) return 1;
 if(a.at(i)<b.at(i)) return -1;
 }
 return 0;
}
string minus(string a,string b)//自然數減法(在之前博客中寫到過,這里直接挪過來調用了)
{
 a=dezero(a);
 b=dezero(b);
 long int i,j=0;
 string c="0";
 string c1,c2;
 string d="-";
 if(judge(a,b)==0) return c;
 if(judge(a,b)==1)
 {
 c1=a;
 c2=b;
 }
 if(judge(a,b)==-1)
 {
 c1=b;
 c2=a;
 j=-1;
 }
 reverse(c1.begin(),c1.end());
 reverse(c2.begin(),c2.end());
 for(i=0;i<c2.length();i++)
 {
 if(c2.at(i)>=48&&c2.at(i)<=57) c2.at(i)-=48;
 if(c2.at(i)>=97&&c2.at(i)<=122) c2.at(i)-=87;
 }
 for(i=0;i<c1.length();i++)
 {
 if(c1.at(i)>=48&&c1.at(i)<=57) c1.at(i)-=48;
 if(c1.at(i)>=97&&c1.at(i)<=122) c1.at(i)-=87;
 }
 for(i=0;i<c2.length();i++)
 {
 c1.at(i)=c1.at(i)-c2.at(i);
 }
 for(i=0;i<c1.length()-1;i++)
 {
 if(c1.at(i)<0)
 {
 c1.at(i)+=n;
 c1.at(i+1)--;
 }
 }
 for(i=c1.length()-1;i>=0;i--)
 {
 if(c1.at(i)>0) break;
 }
 c1.erase(i+1,c1.length());
 for(i=0;i<c1.length();i++)
 {
 if(c1.at(i)>=10) c1.at(i)+=87;
 if(c1.at(i)<10) c1.at(i)+=48;
 }
 reverse(c1.begin(),c1.end());
 if(j==-1) c1.insert(0,d);
 return c1;
}
string divide(string a,string b)//自然數除法
{
 if(b.length()==1&&b.at(0)==48) return "error";
 long int i,j;
 string c1,c2,d,e;
 if(judge(a,b)==0) return "1";
 if(judge(a,b)==-1)
 {
 return "0";
 }
 c1=dezero(a);
 c2=dezero(b);
 d="";
 e="";
 for(i=0;i<c1.length();i++)
 {
 j=0;
 d=d+c1.at(i);
 d=dezero(d);
 while(judge(d,b)>=0)
 {
 d=minus(d,b);//調用之前的減法函數minus,在本文中也加了進來
 d=dezero(d);
 j++;
 }
 e=e+"0";
 e.at(i)=j;
 }
 for(i=0;i<e.length();i++)
 {
 if(e.at(i)>=10) e.at(i)+=87;
 if(e.at(i)<10) e.at(i)+=48;
 }
 e=dezero(e);
 return e;
}
int main()
{
 string a,b;
 while(cout<<"input:"&&cin>>a>>b)
 {
 cout<<"output:"<<divide(a,b)<<endl;
 }
 return 0;
}

關于怎么在C++中利用string實現除法運算問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岳阳市| 霸州市| 阿拉善左旗| 扎兰屯市| 永年县| 甘德县| 嘉祥县| 育儿| 涪陵区| 锡林郭勒盟| 梁平县| 金山区| 田阳县| 措勤县| 灵石县| 南昌市| 新竹县| 温州市| 奉化市| 滨州市| 光山县| 邵阳市| 荣成市| 鄂州市| 四平市| 蛟河市| 闸北区| 秦皇岛市| 绥德县| 镇沅| 团风县| 灵丘县| 施甸县| 安远县| 平谷区| 佛山市| 涿州市| 伊川县| 定结县| 客服| 龙游县|