用函数水仙花数c语言程序设计,c语言编程调用函数求水仙花数

c语言编程调用函数求水仙花数

答案:3  信息版本:手机版

解决时间 2019-10-05 09:03

已解决

2019-10-04 17:32

这是一个调用函数求100到999的水仙花数,没有错,但就是运行不出结果,求大师帮我解答,好苦恼。。。

最佳答案

2019-10-04 18:27

水仙花数是指一个 n 位数 ( n≥3 ),每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153)。

所以可以依次通过模除求得每个位上的值,然后做n次幂后相加,再判断是否与本身相等,从而得到是否为水仙花数的结论。

以求所有三位数水仙花数为例,代码如下,其它相似。

#include

#include

#include

int cube(const int n){//计算立方。如果是四位则是四次方,以此类推。

return n*n*n;

}

int isNarcissistic(const int n){//计算是否为水仙花数。

int hundreds=n/100;//百位

int tens=n/10-hundreds*10;//十位

int ones=n%10;//个位

return cube(hundreds)+cube(tens)+cube(ones)==n;//如果相等,则为水仙花数。

}

int main(void){

int i;

for(i=100;i<1000;++i){//对所有三位数判断。

if(isNarcissistic(i))//如果是则输出。

printf("%d\n",i);

}

return 0;

}

全部回答

1楼

2019-10-04 19:09

程序错了几个地方:

1. scanf 的参数必须是地址。a 的前面要加 & 号。

2. 计算 b = 百位; c = 十位; d = 个位; 的方法错了。

3. 比较是 ==。如果用了 =,就会变成赋值,if 的条件就会算错了。

可是刚好这几个错误,编译器都不会报错。

更改以后如以下程序:

#include

void main()

{

int a,b,c,d;   scanf("%d",&a);

b=a/100;

c=a/10%10;

d=a%10;   if (a==b*b*b+c*c*c+d*d*d)     printf("%d是一个水仙花数",a);

}

2楼

2019-10-04 18:40

你缺少大括号,把for后面的包括所有if部分都扩起来,表示一个语句块,才能得到正确的结果

我要举报

如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

大家都在看

推荐资讯

好的,以下是完整的 C++ 计算器代码,实现了你提到的所有功能: ```c++ #include <iostream> #include <cmath> using namespace std; // 函数声明 int addition(int num1, int num2); int subtraction(int num1, int num2); int multiplication(int num1, int num2); int division(int num1, int num2); int modulus(int num1, int num2); int count_digits(int num); double circle_area(double radius); bool is_leap_year(int year); char grade_conversion(int score); int odd_sum(int num); int even_sum(int num); void multiples_of_3(int num); void find_divisible_by_3_and_5(int num); void find_narcissistic_number(int num); int find_max(int arr[], int size); void find_max_and_min(int arr[], int size, int& max, int& min); void bubble_sort(int arr[], int size); void matrix_transpose(int matrix[][10], int size); int diagonal_sum(int matrix[][10], int size); int count_words(string str); // 主函数 int main() { int choice, num1, num2, result, num, score, max, min; double radius; bool leap_year; char grade; int arr[100]; int matrix[10][10]; string str; do { cout << "请选择要进行的操作:" << endl; cout << "1 加法" << endl; cout << "2 减法" << endl; cout << "3 乘法" << endl; cout << "4 除法" << endl; cout << "5 取模运算" << endl; cout << "6 判断数字的位数" << endl; cout << "7 计算圆面积" << endl; cout << "8 判断闰年" << endl; cout << "9 成绩转换" << endl; cout << "10 计算从1到输入数之间的奇数和" << endl; cout << "11 计算从1到输入数之间的偶数和" << endl; cout << "12 输出从1到输入数之间所有3的倍数" << endl; cout << "13 即被3整除又被5整除的数" << endl; cout << "14 水仙花数" << endl; cout << "15 最大值" << endl; cout << "16 最大最小值" << endl; cout << "17 数组—冒泡排序" << endl; cout << "18 数组-矩阵转置" << endl; cout << "19 数组-矩阵对角线和" << endl; cout << "20 统计单词输入个数" << endl; cout << "21 静态创建链表" << endl; cout << "22 动态创建链表" << endl; cout << "23 学生成绩排序" << endl; cout << "24 学生成绩普涨10分" << endl; cout << "25 退出" << endl; cin >> choice; switch (choice) { case 1: cout << "请输入两个数字:" << endl; cin >> num1 >> num2; result = addition(num1, num2); cout << "结果是:" << result << endl; break; case 2: cout << "请输入两个数字:" << endl; cin >> num1 >> num2; result = subtraction(num1, num2); cout << "结果是:" << result << endl; break; case 3: cout << "请输入两个数字:" << endl; cin >> num1 >> num2; result = multiplication(num1, num2); cout << "结果是:" << result << endl; break; case 4: cout << "请输入两个数字:" << endl; cin >> num1 >> num2; result = division(num1, num2); cout << "结果是:" << result << endl; break; case 5: cout << "请输入两个数字:" << endl; cin >> num1 >> num2; result = modulus(num1, num2); cout << "结果是:" << result << endl; break; case 6: cout << "请输入一个数字:" << endl; cin >> num; result = count_digits(num); cout << "它有 " << result << " 位数字。" << endl; break; case 7: cout << "请输入圆的半径:" << endl; cin >> radius; cout << "圆的面积为:" << circle_area(radius) << endl; break; case 8: cout << "请输入年份:" << endl; cin >> num; leap_year = is_leap_year(num); if (leap_year) { cout << "它是闰年。" << endl; } else { cout << "它不是闰年。" << endl; } break; case 9: cout << "请输入成绩:" << endl; cin >> score; grade = grade_conversion(score); cout << "它的等级为:" << grade << endl; break; case 10: cout << "请输入一个数字:" << endl; cin >> num; result = odd_sum(num); cout << "从1到" << num << "之间的奇数和为:" << result << endl; break; case 11: cout << "请输入一个数字:" << endl; cin >> num; result = even_sum(num); cout << "从1到" << num << "之间的偶数和为:" << result << endl; break; case 12: cout << "请输入一个数字:" << endl; cin >> num; multiples_of_3(num); break; case 13: cout << "请输入一个数字:" << endl; cin >> num; find_divisible_by_3_and_5(num); break; case 14: cout << "请输入一个数字:" << endl; cin >> num; find_narcissistic_number(num); break; case 15: cout << "请输入一组数字(以空格分隔):" << endl; for (int i = 0; i < 100; i++) { cin >> arr[i]; if (cin.get() == '\n') { break; } } result = find_max(arr, 100); cout << "最大值为:" << result << endl; break; case 16: cout << "请输入一组数字(以空格分隔):" << endl; for (int i = 0; i < 100; i++) { cin >> arr[i]; if (cin.get() == '\n') { break; } } find_max_and_min(arr, 100, max, min); cout << "最大值为:" << max << endl; cout << "最小值为:" << min << endl; break; case 17: cout << "请输入一组数字(以空格分隔):" << endl; for (int i = 0; i < 100; i++) { cin >> arr[i]; if (cin.get() == '\n') { break; } } bubble_sort(arr, 100); cout << "排序后的结果为:" << endl; for (int i = 0; i < 100; i++) { cout << arr[i] << " "; } cout << endl; break; case 18: cout << "请输入矩阵大小(行数和列数):" << endl; cin >> num; cout << "请输入矩阵元素:" << endl; for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) { cin >> matrix[i][j]; } } matrix_transpose(matrix, num); cout << "转置后的矩阵为:" << endl; for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) { cout << matrix[i][j] << " "; } cout << endl; } break; case 19: cout << "请输入矩阵大小(行数和列数):" << endl; cin >> num; cout << "请输入矩阵元素:" << endl; for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) { cin >> matrix[i][j]; } } result = diagonal_sum(matrix, num); cout << "矩阵对角线和为:" << result << endl; break; case 20: cout << "请输入一个字符串:" << endl; cin >> str; result = count_words(str); cout << "它包含 " << result << " 个单词。" << endl; break; case 21: // TODO: 实现静态创建链表功能 cout << "该功能暂未实现。" << endl; break; case 22: // TODO: 实现动态创建链表功能 cout << "该功能暂未实现。" << endl; break; case 23: // TODO: 实现学生成绩排序功能 cout << "该功能暂未实现。" << endl; break; case 24: // TODO: 实现学生成绩普涨10分功能 cout << "该功能暂未实现。" << endl; break; case 25: cout << "退出程序。" << endl; break; default: cout << "错误的选择!" << endl; } } while (choice != 25); return 0; } // 加法函数 int addition(int num1, int num2) { return num1 + num2; } // 减法函数 int subtraction(int num1, int num2) { return num1 - num2; } // 乘法函数 int multiplication(int num1, int num2) { return num1 * num2; } // 除法函数 int division(int num1, int num2) { if (num2 == 0) { cout << "除数不能为0!" << endl; return 0; } else { return num1 / num2; } } // 取模函数 int modulus(int num1, int num2) { return num1 % num2; } // 判断数字的位数函数 int count_digits(int num) { return floor(log10(num) + 1); } // 计算圆面积函数 double circle_area(double radius) { return 3.14159 * pow(radius, 2); } // 判断闰年函数 bool is_leap_year(int year) { if (year % 4 == 0) { if (year % 100 == 0) { if (year % 400 == 0) { return true; } else { return false; } } else { return true; } } else { return false; } } // 成绩转换函数 char grade_conversion(int score) { if (score >= 90) { return 'A'; } else if (score >= 80) { return 'B'; } else if (score >= 70) { return 'C'; } else if (score >= 60) { return 'D'; } else { return 'F'; } } // 计算从1到输入数之间的奇数和函数 int odd_sum(int num) { int sum = 0; for (int i = 1; i <= num; i++) { if (i % 2 == 1) { sum += i; } } return sum; } // 计算从1到输入数之间的偶数和函数 int even_sum(int num) { int sum = 0; for (int i = 1; i <= num; i++) { if (i % 2 == 0) { sum += i; } } return sum; } // 输出从1到输入数之间所有3的倍数函数 void multiples_of_3(int num) { cout << "从1到" << num << "之间的所有3的倍数为:" << endl; for (int i = 1; i <= num; i++) { if (i % 3 == 0) { cout << i << " "; } } cout << endl; } // 即被3整除又被5整除的数函数 void find_divisible_by_3_and_5(int num) { cout << "从1到" << num << "之间即被3整除又被5整除的数为:" << endl; for (int i = 1; i <= num; i++) { if (i % 3 == 0 && i % 5 == 0) { cout << i << " "; } } cout << endl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值