c++ 编写一个程序,读入一个字符串表示的非负数(串中每个字符代表一个数字),输出该正整数加一后的结果。输入一行为正整数字符串,该正整数最前不包含字符'0'(除非该正整数等于0),正整数字符串的长度小于50(即正整数的大小小于10^50)
时间: 2024-09-29 08:11:24 浏览: 42
在 C++ 中编写这样的程序,你可以使用标准库中的 `std::cin` 和 `std::string` 类型,以及循环和字符串操作。下面是一个简单的示例程序:
```cpp
#include <iostream>
#include <string>
std::string add_one_to_number(const std::string& num_str) {
// 遍历输入的数字字符串,从后往前遍历,因为小数点之后不需要增加
for (int i = num_str.length() - 1; i >= 0; --i) {
// 如果当前字符是 '9',则替换为 '0'
if (num_str[i] == '9') {
num_str[i] = '0';
} else {
// 否则将当前字符加1,并直接转换回字符
num_str[i]++;
break; // 一旦找到不是 '9' 的字符,就停止处理
}
}
// 检查是否需要添加小数点并加1
if (num_str[0] == '0' && num_str.size() > 1) { // 如果是0开头且不是单独的0
num_str.insert(num_str.begin(), "1.");
} else if (num_str[num_str.length() - 1] != '.') { // 如果原数没有小数点
num_str += ".1";
}
return num_str;
}
int main() {
std::string input_num;
std::cout << "请输入一个非零正整数: ";
std::getline(std::cin, input_num); // 使用 getline 防止遇到空格
// 转换输入到整数验证其有效性
long long num = 0;
if (std::all_of(input_num.begin(), input_num.end(), ::isdigit)) {
num = std::stoll(input_num);
if (num >= 0) {
input_num = std::to_string(num + 1);
} else {
std::cerr << "错误:输入不是非负整数。\n";
return 1;
}
} else {
std::cerr << "错误:输入包含无效字符。\n";
return 1;
}
std::cout << "输入的数加一后为: " << add_one_to_number(input_num) << std::endl;
return 0;
}
```
当你运行这个程序时,它会提示用户输入一个非零正整数,然后将其加一并打印结果。
阅读全文