1.最大公约数(辗转相除法求模): 用枚举法需要较长时间,用辗转相除法。 eg.求n个整数的最大公约数 scanf("%d",&b); for(i=0;i<n-1;i++) { scanf("%d",&a); r=a%b; while(r!=0) { a=b; b=r; r=a%b; } } printf("%d\n",b); 假设a<=b,直到某次求模等于零,最大公约数就算较小的那个数。 最小公倍数=a*b/最大公约数
2.计算各位数字之和:先取整数m的各位,b=m%10,然后去掉个位,得到新的整数m,即m=m/10,然后取新整数的个位,一直重复,直到整数m为0位置。 do{ s=0; while(m>0) { s+=m%10; m/=10; } m=s; }while(m>=10);
3.有些大数没必要计算出来,eg.要求一个大数的阶乘的位数。 我们知道,一个数N取其以10为底的对数并取整,得到的值为整数N的位长-1 n!=123*4…*n两边取以10为底的对数,就将乘法运算变成加法运算。