【C】约数的个数

题目描述

输入n个整数,依次输出每个数的约数的个数

输入描述:

输入的第一行为N,即数组的个数(N<=1000)
接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000)
当N=0时输入结束。

输出描述:

可能有多组输入数据,对于每组输入数据,
输出N行,其中每一行对应上面的一个数的约数的个数。
示例1

输入

5
1 3 4 6 12

输出

1
2
3
4
6

#include
#include
int main(){
	int n,i;
	int buf[1000];
	int buff[1000];
	int num[1000];
	int j;
	while(scanf("%d",&n)!=EOF){
		for(i=0;i

注:(1)error C2296: “%”: 非法,左操作数包含“double”类型:%求余,只允许整型数据参与计算。

       (2)unsigned   int   0~4294967295  
                int   -2147483648~2147483647
                unsigned long 0~4294967295
                long   -2147483648~2147483647
                long long的最大值:9223372036854775807
  long long的最小值:-9223372036854775808
  unsigned long long的最大值:1844674407370955161
  __int64的最大值:9223372036854775807
  __int64的最小值:-9223372036854775808
  unsigned __int64的最大值:18446744073709551615

               题目要求1000000000,int是够用的。

 

%lf  双精度浮点型,也就是double型的格式,默认保留6位小数。如:double a = 1.2; printf("%lf",a); //1.200000
%.2lf  同上,不过限制了,值保留2位小数。如:double a = 1.2345; printf("%.2lf",a); //1.23
%.2f  表示单精度浮点型,也就是float型的格式。如:float a = 1.2731;  printf("%.2f",a); //1.27

 (3)VC 2008后为重载函数,原型为 float sqrt (float),double sqrt (double),double long sqrt(double long),没有sqrt (int),但是返回值可以为int:buff[i]=sqrt((float)buf[i])

高效一点的做法:

#include  
void main(){  
    int N,n,i,s,r;  
    while(scanf("%d",&N) != EOF){  
        while(N--){  
            scanf("%d",&n);  
            s=1;  
            for (i=2;i*i<=n;i++) {  
                r=0;  
                while(n%i==0) {  
                    r++;  
                    n=n/i;  
                }  
                if(r>0){  
                    r++;  
                    s*=r;  
                }  
            }  
            if(n>1)  s*=2;  
            printf("%d\n",s);  
        }  
    }  
}  

你可能感兴趣的:(考试)