码迷,mamicode.com
首页 > 其他好文 > 详细

The beginning !

时间:2014-12-01 06:27:07      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   os   sp   for   on   

 

今天算是我的开始吧,正式加入C语言、C++ 编程这个长跑的队伍。加入这个行列的原因也很简单,每次通过短小的程序解决一个问题时,那感觉还是自豪感爆棚啊!小小代码,有时很短,包含的逻辑思维却很丰富,很巧妙! 

分享一下昨天总结的一些代码和经验:

原题1:见图片

bubuko.com,布布扣

我的程序(正解):

/*
    草滩小王子的相反数
    BY IT_greenhand
    2014/11/30
*/ 
#include<stdio.h>
#include<string.h>
#include<stdbool.h>
#define N 1000000000
long int n,no,i,len;
bool a[N];

int main()
{
    int m;
    i=0;
    
    memset(a,false,sizeof(a));
    
    while(scanf("%ld",&n)!=EOF)
    {
        no=0;i=0;  //注意清零 
        while(n!=0)
        {
            m = n%2;
            n = n/2;
            if(m) a[i]=true;
            else a[i]=false;
            i++;
        }
        len = i;
        i=0;
    
        while(!a[i]) i++;
        for(;i<len;i++)
        {
            //if(a[i]) printf("1");
            //else printf("0");    
            
            if(a[i]) no = no*2+1;
            else     no = no*2;
            
        }
        printf("%d\n",no);
            
    }
    return 0;
}

这个题里面涉及儿二进制的思想,感觉还是比较陌生,算是长见识了!
思路是:首先将输入的十进制数转化为二进制(true/false)反序放在数组里面,然后正序转化为十进制,最后就得到了符合要求的相反数。

 

原题2(见图片):

bubuko.com,布布扣

我的代码:

 
#include<stdio.h>
#include<math.h>
int main()
{
    unsigned long int a;
    int cnt,i,k;
    while(scanf("%ld",&a)!=EOF)
    {
        if(a!=1)
        {
        
        cnt=0;
        k = sqrt(a);
        for(i=1;i<sqrt(a);i++)
        {
            if(a%i==0)
                cnt+=2;
        }
        if(k*k == a) cnt++;
        printf("%d\n",cnt);
       }  
       else
       printf("1\n");
        
    }
    return 0;
}

总结:

1、对于数据2^31测试不通过,long int 的数据范围(-2^31,2^31-1),在此贴一下数据范围的总结

unsigned   int   0~4294967295  

int   -2147483648~2147483647

unsigned long 0~4294967295

long   2147483648~2147483647

long long的最大值:9223372036854775807

long long的最小值:-9223372036854775808

unsigned long long的最大值:18446744073709551615

__int64的最大值:9223372036854775807

__int64的最小值:-9223372036854775808

unsigned __int64的最大值:18446744073709551615

正数最大为unsigned __int64,取到2^64-1,超过就要用高精度算法了。

2、找公约数只找到sqrt(a)可以减小时间复杂度,是个优化,且在这里不能带等号。

 

The beginning !

标签:style   blog   http   io   color   os   sp   for   on   

原文地址:http://www.cnblogs.com/Daniel-He/p/4134076.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!