unsigned long long fun(unsigned long long a, unsigned long long b) { return (a + b) / 2; }
时间: 2023-10-11 22:08:21 浏览: 178
以上函数中存在潜在的问题,当a和b的值比较大时,它们的和可能会溢出。因此,在计算(a + b) / 2时,可能会得到错误的结果。
为了避免这个问题,可以将(a + b) / 2改为a + (b - a) / 2,这样可以保证不会发生溢出。
修改后的代码如下:
```c++
unsigned long long fun(unsigned long long a, unsigned long long b) {
return a + (b - a) / 2;
}
```
这样就可以避免溢出带来的错误结果。
相关问题
求1+2+...+n之和。请改正程序中的错误,使它能得出正确的结果。 #include <stdio.h> unsigned long fun(int n); main() { int n; unsigned long sum = 0; printf("Input n:"); scanf("%d", &n); while (n) { sum = fun(n--); } printf("The sum is :%u", sum); } unsigned long fun(int n) { unsigned long m_sum = 0; m_sum += n; return m_sum; }
以下是改正后的程序:
```
#include <stdio.h>
unsigned long fun(int n);
int main() {
int n;
unsigned long sum = 0;
printf("Input n:");
scanf("%d", &n);
sum = fun(n);
printf("The sum is :%lu", sum);
return 0;
}
unsigned long fun(int n) {
unsigned long m_sum = 0;
for (int i = 1; i <= n; i++) {
m_sum += i;
}
return m_sum;
}
```
改正说明:
1. 在 `main` 函数中,应该把 `while` 循环改为 `sum = fun(n);`,以便正确计算结果。
2. 在 `printf` 函数中,应该使用 `%lu` 格式控制符输出 `unsigned long` 类型的值。
3. 在 `fun` 函数中,应该使用循环计算 1 到 n 的和,而不是直接把 n 加到 m_sum 中。
给定程序中,函数 fun 的功能是:将形参 n 各位上为偶数的数去除,剩余的数按原来从⾼位到低位的顺 序组成⼀个新的数。如主程序中输⼊⼀个数: 27638496,输出为: 739 。 将程序补充完整。(每空 2 分,共 10 分#include <stdio.h> void fun(unsigned long *n) { unsigned long x=0, i; int t; i=1; while(*n) { t=*n % __1__; if(t%2 != __2__) { x=x+t*i; i=__3__; } *n =__4__; } *n=__5__; } int main() { unsigned long n=-1; while(n>99999999||n<0){ printf("Please input(0<n<100000000): "); scanf("%ld",&n); } fun(&n); printf("\nThe result is: %ld\n",n); }
将程序补充完整如下:
```
#include <stdio.h>
void fun(unsigned long *n) {
unsigned long x=0, i=1;
int t;
while(*n) {
t=*n % 10;
if(t%2 != 0) {
x=x+t*i;
i=i*10;
}
*n = *n / 10;
}
*n=x;
}
int main() {
unsigned long n=-1;
while(n>99999999||n<0){
printf("Please input(0<n<100000000): ");
scanf("%ld",&n);
}
fun(&n);
printf("\nThe result is: %ld\n",n);
return 0;
}
```
函数fun中,首先定义了一个变量x用于存储去除偶数位后的数,以及一个变量i用于在循环中控制x的位数。然后,使用while循环逐位取出形参n的值,将取出的值存入变量t中。如果t为偶数,则直接舍弃;否则将t乘以i并加上x,更新x和i的值。最后,将x存回形参n中。
在主函数main中,先读入一个合法的n值,并将其地址传入函数fun中。然后输出去除偶数位后得到的新数。
阅读全文