微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

POJ 1565大数类似二进制求十进制

题意: 10120(skew) = 1 * (2^5-1) + 0 * (2^4-1) + 1 * (2^3-1) + 2 * (2^2-1) + 0 * (2^1-1) 
                              = 31 + 0 + 7 + 6 + 0 

      = 44.      (令char n[]=10120其中易看出skew=strlen(n))

思路:按公式求即可。有点求2^n即求2的n次方技巧用移位可快速求出,即:2^n=2<<(n-1)

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    char n[35];
    while(cin>>n&&strcmp(n,"0")!=0)
    {
        int i,l,m,sum=0;
        l=m=strlen(n);
        for(i=0;i<l;i++)
        {
            sum+=((2<<(m-1))-1)*(n[i]-'0');
            m--;
        }
        cout<<sum<<endl;
    }
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐