亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++使用string的大數除法運算(4)

 更新時間:2019年09月18日 11:44:37   作者:好想告訴你wt  
這篇文章主要為大家詳細介紹了C++使用string的大數除法運算,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本次項目目標:使用C++完成對于大數的除法運算,供大家參考,具體內容如下

項目要點

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

運行截圖及代碼如下:

#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語言指針

    深入了解C語言指針

    這篇文章主要介紹了C語言指針詳解及用法示例,介紹了其相關概念,然后分享了幾種用法,具有一定參考價值。需要的朋友可以了解下
    2021-07-07
  • C/C++產生隨機數函數簡單介紹

    C/C++產生隨機數函數簡單介紹

    這篇文章主要為大家詳細介紹了C/C++產生隨機數函數的實現方法,如何使用C/C++產生隨機數函數,感興趣的小伙伴們可以參考一下
    2016-04-04
  • C++淺析STL?迭代器?容器的使用

    C++淺析STL?迭代器?容器的使用

    這篇文章主要介紹了C++?STL、迭代器、容器,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • C語言實現字母大小寫轉換的方法

    C語言實現字母大小寫轉換的方法

    這篇文章主要介紹了C語言實現字母大小寫轉換的方法,涉及C語言字符串的遍歷與轉換技巧,非常簡單實用,需要的朋友可以參考下
    2015-07-07
  • C語言進階練習二叉樹的遞歸遍歷

    C語言進階練習二叉樹的遞歸遍歷

    樹是一種重要的非線性數據結構,直觀地看,它是數據元素(在樹中稱為結點)按分支關系組織起來的結構,很象自然界中的樹那樣。樹結構在客觀世界中廣泛存在,如人類社會的族譜和各種社會組織機構都可用樹形象表示,本篇介紹二叉樹的遞歸與非遞歸遍歷的方法
    2022-06-06
  • C語言實現求定積分的方法

    C語言實現求定積分的方法

    這篇文章主要介紹了C語言實現求定積分的方法,涉及C語言操作相關數學函數的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • C++ Boost PropertyTree解析INI文件詳解

    C++ Boost PropertyTree解析INI文件詳解

    Boost PropertyTree庫不僅可以解析JSON,XML格式,還可以直接解析INI格式文件。這篇文章就是為大家介紹一下如何通過Boost PropertyTree解析INI文件,需要的可以參考一下
    2022-01-01
  • C++實例分析組合數的計算與排列組合的產生

    C++實例分析組合數的計算與排列組合的產生

    這篇文章主要介紹了C++組合數的計算與排列和組合無重集元素的產生,對計算算法感興趣的同學,可以參考一下,理解其原理,并且試驗一下。
    2022-07-07
  • C++核心編程之內存分區(qū)詳解

    C++核心編程之內存分區(qū)詳解

    這篇文章主要為大家詳細介紹了C++核心編程之內存分區(qū),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • MFC擴展DLL中導出類和對話框的實現方法

    MFC擴展DLL中導出類和對話框的實現方法

    這篇文章主要介紹了MFC擴展DLL中導出類和對話框的實現方法,詳細講述了實現擴展DLL中導出類和對話框的具體步驟與方法,具有不錯的實用價值,需要的朋友可以參考下
    2014-10-10

最新評論