本題使用了寫好的高精度整數的模板,將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 以內的...