一J一
编程实现:任意输入一个正整数,输出这个正整数之内的所有
奇数的和以及所有偶数的和。
要求:考虑数据输入的正确性,可用异常处理
def sum_odd_even(n):
if not isinstance(n, int) or n <= 0:
raise ValueError('输入必须是正整数')
odd_sum = 0
even_sum = 0
for i in range(1, n+1):
if i % 2 == 0:
even_sum += i
else:
odd_sum += i
return odd_sum, even_sum
try:
n = int(input('请输入一个正整数:'))
odd_sum, even_sum = sum_odd_even(n)
print(f'{n} 之内所有奇数的和为:{odd_sum}')
print(f'{n} 之内所有偶数的和为:{even_sum}')
except ValueError as e:
print(e)
不知道你这个问题是否已经解决, 如果还没有解决的话:① 求出它是几位数
② 输出每个位上的数
③ 逆序输出每一位数
例如输入123,则输出
1 2 3
3 2 1
总共3位数
对于一个正整数n,想要逆序输出每一位数字,我们可以使用不断丢个位的方法,在丢弃个位的时候同时使用一个变量统计这时的位数,当n为0时退出循环。
想要顺序输出,则利用递归的思想将个位丢弃之后输出此时n的个位,然后跳出一层循环后再输出此时n的个位。
具体可看代码中的注释
代码如下:
void Order(int n) //将一个数顺序输出每一位
{
int i;
if((i=n/10)!=0) //一个p位数通过循环p-1次将初最高位都丢弃,之后printf函数打印,再跳出一层循环
{
Sun1(i);
}
printf("%d ",n%10); //打印此时n的个位
}
void Reverse(int n) //逆序输出每一位数字且计算有多少位
{
int i;
int sum = 0;
printf("\n");
do
{
printf("%d ", n % 10);//得到个位
n/=10; //n利用/=不断将个位丢弃
sum++; //统计位数
}while(n != 0); //直到为n为0时退出循环
printf("\n");
printf("总共%d位数\n\n", sum);
}