九度OJ 1208 10進製 VS 2進製

2021-07-26 22:51:50 字數 1086 閱讀 8055

本題使用了寫好的高精度整數的模板,將ten2n()函式的輸出方式稍微改了改。

debug過程:

①過載的*運算通過這道題發現了bug:當輸入的int x為0時,由於使用的是bigint與int逐位乘的演算法,故若bigint的intsize不為1的話,會return乙個值為0但intsize!=0的bigint物件(這種bigint物件是不能容忍的)導致出錯。故加入了修正**,修改後如下:

bigint operator*(int x)const

int c=0;

int i;

for (i=0;i0)

return pro;

}

②在輸入的十進位制bigint轉化為二進位制時,使用了儲存輸入的s串再對這次輸出進行儲存。而題目說輸入的十進位制數字數<=1000,極限情況時其轉化的二進位制串遠大於1000,此時便會發生陣列越界。故要擴大s的容量。

int main()

void char2bigint(char *s)

intsize++;

} }bigint operator+(const bigint &a)const

return pro;

} bigint operator/(const int x)const

answer.intsize=intsize!=1&&answer.digit[intsize-1]==0?intsize-1:intsize;//必須同時滿足 intsize!=1才能排除掉輸入本身即為0的情況,

//否則輸入為0的話會出現answer.intsizse=0的錯誤賦值。

return answer;

} int operator%(const int x)const

return c;

} void print()

}void ten2n(bigint &x,int n,char *s) while (!(x.digit[0]==0&&x.intsize==1));

s[len]='\0';

}int main()

return true;

}

九度 題目1208 10進製 VS 2進製

題目描述 對於乙個十進位制數a,將a轉換為二進位制數,然後按位逆序排列,再轉換為十進位制數b,我們乘b為a的二進位制逆序數。例如對於十進位制數173,它的二進位制形式為10101101,逆序排列得到10110101,其十進位制數為181,181即為173的二進位制逆序數。輸入 乙個1000位 即10...

65 題目1208 10進製 VS 2進製

題目描述 對於乙個十進位制數a,將a轉換為二進位制數,然後按位逆序排列,再轉換為十進位制數b,我們乘b為a的二進位制逆序數。例如對於十進位制數173,它的二進位制形式為10101101,逆序排列得到10110101,其十進位制數為181,181即為173的二進位制逆序數。輸入 乙個1000位 即10...

10進製VS2進製

對於乙個十進位制數a,將a轉換為二進位制數,然後按位逆序排列,再轉換為十進位制數b,我們乘b為a的二進位制逆序數。例如對於十進位制數173,它的二進位制形式為10101101,逆序排列得到10110101,其十進位制數為181,181即為173的二進位制逆序數。乙個1000位 即10 999 以內的...