鱼C论坛

 找回密码
 立即注册
查看: 1121|回复: 4

[已解决]一道C语言的小疑问

[复制链接]
发表于 2019-10-22 00:16:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
疑问:
如果我写一个这样的代码  

如 if (a/i==(int) a/i)

是不是这个代码可以成立,我的目的是想,早出某个数的因数,

比如 6,的因数有 1.2.3.这样子。

如果不行,请指点一下该怎么求出一个数的因数。

求助!
最佳答案
2019-10-22 00:50:43
本帖最后由 jackz007 于 2019-10-22 00:56 编辑

      标准答案是取余,例如,6 % 2 = 0,6 % 3 = 0 , 6 % 4 = 2 , 6 % 5 = 1,就是说,6 可以被 2、3 整除,因为余数为 0,不可以被 4、5 整除,因为余数不为 0 。所以,2、3 是 6 的因数,4、5 就不是。
  1. #include <stdio.h>

  2. void factor(int m , int * array)
  3. {
  4.         int d , k                                                              ;
  5.         for(d = 0 , k = 2 ; k < m ; k ++) if(! (m % k)) array[d ++ + 1] = k    ;
  6.         array[0] = d                                                           ;
  7. }

  8. main(void)
  9. {
  10.         int array[256] , k , m                                                 ;
  11.         factor(6 , array)                                                      ;
  12.         if(array[0]) {
  13.                 for(k = 0 ; k < array[0] ; k ++) printf("%d\n" , array[k + 1]) ;
  14.         } else {
  15.                 printf("prime\n")                                              ;
  16.         }
  17. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-22 00:50:43 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-10-22 00:56 编辑

      标准答案是取余,例如,6 % 2 = 0,6 % 3 = 0 , 6 % 4 = 2 , 6 % 5 = 1,就是说,6 可以被 2、3 整除,因为余数为 0,不可以被 4、5 整除,因为余数不为 0 。所以,2、3 是 6 的因数,4、5 就不是。
  1. #include <stdio.h>

  2. void factor(int m , int * array)
  3. {
  4.         int d , k                                                              ;
  5.         for(d = 0 , k = 2 ; k < m ; k ++) if(! (m % k)) array[d ++ + 1] = k    ;
  6.         array[0] = d                                                           ;
  7. }

  8. main(void)
  9. {
  10.         int array[256] , k , m                                                 ;
  11.         factor(6 , array)                                                      ;
  12.         if(array[0]) {
  13.                 for(k = 0 ; k < array[0] ; k ++) printf("%d\n" , array[k + 1]) ;
  14.         } else {
  15.                 printf("prime\n")                                              ;
  16.         }
  17. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-22 01:37:07 | 显示全部楼层
本帖最后由 bin554385863 于 2019-10-22 01:43 编辑
  1. #include <stdio.h>
  2. void func(unsigned int n)
  3. {
  4.     int count = 0;
  5.     /*统计因数的个数*/
  6.     for (size_t i = 1; i <= n; ++i)
  7.     {
  8.         if (n % i == 0)
  9.         {
  10.             count++;
  11.         }
  12.     }
  13.     /*定义数组保存因数*/
  14.     int arr[count];
  15.     for (size_t i = 1, j = 0; i <= n, j < count; i++)
  16.     {
  17.         if (n % i == 0)
  18.         {
  19.             arr[j] = n / i;
  20.             j++;
  21.         }
  22.     }
  23.     /*输出*/
  24.     for (size_t i = 0; i < count; i++)
  25.     {
  26.         printf("%d  ", arr[i]);
  27.     }
  28.     printf("\n");
  29. }
  30. int main(int argc, char const *argv[])
  31. {
  32.     int a = 1;
  33.     while (1)
  34.     {
  35.         scanf("%d", &a);
  36.         if (a < 1)//任意小于1的数都可以作为结束条件
  37.         {
  38.             printf("程序结束");
  39.             break;
  40.         }
  41.         func(a);
  42.         printf("\n");
  43.     }
  44.     return 0;
  45. }
复制代码

------------------------------------------------------------------------------
Microsoft Windows [版本 10.0.16299.1087]
(c) 2017 Microsoft Corporation。保留所有权利。

E:\Users\86184\Documents\Code>c:\Users\86184\.vscode\extensions\ms-vscode.cpptools-0.26.0\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-mdgsvohv.qcv --stdout=Microsoft-MIEngine-Out-soj42rr1.jqn --stderr=Microsoft-MIEngine-Error-stlm45ls.j35 --pid=Microsoft-MIEngine-Pid-l4pwj1cr.4vi "--dbgExe=E:\My Program\MinGW\bin\gdb.exe" --interpreter=mi
10
10  5  2  1

30
30  15  10  6  5  3  2  1

900
900  450  300  225  180  150  100  90  75  60  50  45  36  30  25  20  18  15  12  10  9  6  5  4  3  2  1

0
程序结束


E:\Users\86184\Documents\Code>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-22 13:31:02 | 显示全部楼层
jackz007 发表于 2019-10-22 00:50
标准答案是取余,例如,6 % 2 = 0,6 % 3 = 0 , 6 % 4 = 2 , 6 % 5 = 1,就是说,6 可以被 2、3 整 ...

谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-22 13:31:33 | 显示全部楼层
bin554385863 发表于 2019-10-22 01:37
------------------------------------------------------------------------------
Microsoft Windows  ...

感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 16:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表