泰安本地网站,app定制价格是多少,河北省住房和城乡建设部网站首页,wordpress 数据库清空描述
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入描述#xff1a;
多组数据#xff0c;每行为一个长度不超过30位的十进制非负整数。 #xff08;注意是10进制数字的个数可能有30个#xff0c;而非30bits的整数#xff09;
输出描述#xff…描述
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入描述
多组数据每行为一个长度不超过30位的十进制非负整数。 注意是10进制数字的个数可能有30个而非30bits的整数
输出描述
每行输出对应的二进制数。
示例1
输入示例
0
1
3
8输出示例
0
1
11
1000思路
仍然是“除2取余法”主要的区别在于这次要对一个字符串表示的大整数取余因为输入的十进制数长度最多为30位数字只能用字符串来表示。
将输入的十进制数字逐步除以2并将每一步的余数保存在二进制数数组中。然后从数组末尾开始输出数组中的元素以得到正确的二进制表示。
函数 Divided 用于实现字符串表示的大整数的除法操作并最后还去掉了结果字符串开头多余的0。整个程序通过循环处理多组输入的十进制数字。
源代码
#includeiostream
#includestring
#includevector
using namespace std;// 用于将字符串表示的大整数除以 x并返回商
string Divided(string str, int x) {int reminder 0;for (int i 0; i str.size(); i) {int current str[i] - 0 reminder * 10; // 将当前位转换为整数并加上上一次的余数str[i] current / x 0; // 将商转换为字符并保存到字符串中reminder current % x; // 更新余数}int pos 0;while (str[pos] 0) {pos; // 去掉结果字符串开头多余的零}str str.substr(pos); // 更新结果字符串return str;
}int main() {string s;while (cin s) {vectorint binary; // 用于存储二进制数的每一位while (s.size() ! 0) {int last s[s.size() - 1] - 0; // 获取字符串最后一位的整数值binary.push_back(last % 2); // 将最后一位对2取余并保存到二进制数数组中s Divided(s, 2); // 将原字符串除以2得到新的字符串}for (int i binary.size() - 1; i 0; i--) {cout binary[i]; // 从数组末尾开始输出二进制数得到正确的二进制表示}cout endl;}return 0;
}提交结果