日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言长整数转化为16进制字符串,一个30位的字符串十进制长整数怎么转换为对应的十六进制和八进制...

發布時間:2023/12/4 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言长整数转化为16进制字符串,一个30位的字符串十进制长整数怎么转换为对应的十六进制和八进制... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C/C++ code#include

#include

using namespace std;

inline int compare(string str1,string str2) {//相等返回0,大于返回1,小于返回-1

if (str1.size()>str2.size()) return 1; //長度長的整數大于長度小的整數

else if (str1.size()

else return str1.compare(str2); //若長度相等,則頭到尾按位比較

}

string SUB_INT(string str1,string str2);

string ADD_INT(string str1,string str2) {//高精度加法

int sign=1; //sign 為符號位

string str;

if (str1[0]=='-') {

if (str2[0]=='-') {

sign=-1;

str=ADD_INT(str1.erase(0,1),str2.erase(0,1));

} else {

str=SUB_INT(str2,str1.erase(0,1));

}

} else {

if (str2[0]=='-') {

str=SUB_INT(str1,str2.erase(0,1));

} else { //把兩個整數對齊,短整數前面加0補齊

string::size_type L1,L2;

int i;

L1=str1.size();

L2=str2.size();

if (L1

for (i=1;i<=L2-L1;i++) str1="0"+str1;

} else {

for (i=1;i<=L1-L2;i++) str2="0"+str2;

}

int int1=0,int2=0; //int2 記錄進位

for (i=str1.size()-1;i>=0;i--) {

int1=(int(str1[i])-'0'+int(str2[i])-'0'+int2)%10;

int2=(int(str1[i])-'0'+int(str2[i])-'0'+int2)/10;

str=char(int1+'0')+str;

}

if (int2!=0) str=char(int2+'0')+str;

}

}

//運算后處理符號位

if ((sign==-1)&&(str[0]!='0')) str="-"+str;

return str;

}

string SUB_INT(string str1,string str2) {//高精度減法

int sign=1; //sign 為符號位

string str;

int i,j;

if (str2[0]=='-') {

str=ADD_INT(str1,str2.erase(0,1));

} else {

int res=compare(str1,str2);

if (res==0) return "0";

if (res<0) {

sign=-1;

string temp =str1;

str1=str2;

str2=temp;

}

string::size_type tempint;

tempint=str1.size()-str2.size();

for (i=str2.size()-1;i>=0;i--) {

if (str1[i+tempint]

j=1;

while (1) {//zhao4zhong1添加

if (str1[i+tempint-j]=='0') {

str1[i+tempint-j]='9';

j++;

} else {

str1[i+tempint-j]=char(int(str1[i+tempint-j])-1);

break;

}

}

str=char(str1[i+tempint]-str2[i]+':')+str;

} else {

str=char(str1[i+tempint]-str2[i]+'0')+str;

}

}

for (i=tempint-1;i>=0;i--) str=str1[i]+str;

}

//去除結果中多余的前導0

str.erase(0,str.find_first_not_of('0'));

if (str.empty()) str="0";

if ((sign==-1) && (str[0]!='0')) str ="-"+str;

return str;

}

string MUL_INT(string str1,string str2) {//高精度乘法

int sign=1; //sign 為符號位

string str;

if (str1[0]=='-') {

sign*=-1;

str1 =str1.erase(0,1);

}

if (str2[0]=='-') {

sign*=-1;

str2 =str2.erase(0,1);

}

int i,j;

string::size_type L1,L2;

L1=str1.size();

L2=str2.size();

for (i=L2-1;i>=0;i--) { //模擬手工乘法豎式

string tempstr;

int int1=0,int2=0,int3=int(str2[i])-'0';

if (int3!=0) {

for (j=1;j<=(int)(L2-1-i);j++) tempstr="0"+tempstr;

for (j=L1-1;j>=0;j--) {

int1=(int3*(int(str1[j])-'0')+int2)%10;

int2=(int3*(int(str1[j])-'0')+int2)/10;

tempstr=char(int1+'0')+tempstr;

}

if (int2!=0) tempstr=char(int2+'0')+tempstr;

}

str=ADD_INT(str,tempstr);

}

//去除結果中的前導0

str.erase(0,str.find_first_not_of('0'));

if (str.empty()) str="0";

if ((sign==-1) && (str[0]!='0')) str="-"+str;

return str;

}

string DIVIDE_INT(string str1,string str2,int flag) {//高精度除法。flag==1時,返回商; flag==0時,返回余數

string quotient,residue; //定義商和余數

int sign1=1,sign2=1;

if (str2 == "0") { //判斷除數是否為0

quotient= "ERROR!";

residue = "ERROR!";

if (flag==1) return quotient;

else return residue ;

}

if (str1=="0") { //判斷被除數是否為0

quotient="0";

residue ="0";

}

if (str1[0]=='-') {

str1 = str1.erase(0,1);

sign1 *= -1;

sign2 = -1;

}

if (str2[0]=='-') {

str2 = str2.erase(0,1);

sign1 *= -1;

}

int res=compare(str1,str2);

if (res<0) {

quotient="0";

residue =str1;

} else if (res == 0) {

quotient="1";

residue ="0";

} else {

string::size_type L1,L2;

L1=str1.size();

L2=str2.size();

string tempstr;

tempstr.append(str1,0,L2-1);

for (int i=L2-1;i

tempstr=tempstr+str1[i];

tempstr.erase(0,tempstr.find_first_not_of('0'));//zhao4zhong1添加

if (tempstr.empty()) tempstr="0";//zhao4zhong1添加

for (char ch='9';ch>='0';ch--) { //試商

string str;

str=str+ch;

if (compare(MUL_INT(str2,str),tempstr)<=0) {

quotient=quotient+ch;

tempstr =SUB_INT(tempstr,MUL_INT(str2,str));

break;

}

}

}

residue=tempstr;

}

//去除結果中的前導0

quotient.erase(0,quotient.find_first_not_of('0'));

if (quotient.empty()) quotient="0";

if ((sign1==-1)&&(quotient[0]!='0')) quotient="-"+quotient;

if ((sign2==-1)&&(residue [0]!='0')) residue ="-"+residue ;

if (flag==1) return quotient;

else return residue ;

}

string DIV_INT(string str1,string str2) {//高精度除法,返回商

return DIVIDE_INT(str1,str2,1);

}

string MOD_INT(string str1,string str2) {//高精度除法,返回余數

return DIVIDE_INT(str1,str2,0);

}

int main() {

char ch;

string s1,s2,res;

while (cin>>s1>>ch>>s2) {

switch (ch) {

case '+':res=ADD_INT(s1,s2);break;

case '-':res=SUB_INT(s1,s2);break;

case '*':res=MUL_INT(s1,s2);break;

case '/':res=DIV_INT(s1,s2);break;

case '%':res=MOD_INT(s1,s2);break;

default : break;

}

cout<

}

return(0);

}

總結

以上是生活随笔為你收集整理的c语言长整数转化为16进制字符串,一个30位的字符串十进制长整数怎么转换为对应的十六进制和八进制...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。