编程之美_编程之美 txt_编程之美 pdf(2)

电脑杂谈  发布时间:2017-02-09 10:27:56  来源:网络整理

如果百位上数字大于1(即为2~9),则百位上可能出现1的次数也仅由更高位决定,比如12 213,则百位出现1的可能性为:100~199,1 100~1 199,2 100~2 199,…,11 100~11 199,12 100~12 199,一共有1 300个,并且等于更高位数字1(121)×当前位数(100)。

通过上面的归纳和总结,我们可以写出如下的更高效算法来计算f(N):

代码清单2-10

int count=0;//需注意越界

int number=1;//操作数

int lower=0;//个位1个数

int mid=0;//十位1个数

int high=0;//百位1个数

int n=123;

编程之美 pdf_编程之美 txt_编程之美

while(n/number!=0)

{

lower=n-(n/number)*number;

mid=(n/number)%10;

high=n/(number*10);

System.out.println(lower" mid= "mid" high "high);

switch(mid)

{

case 0:

count=high*number;

break;

case 1:

count=high*numberlower1;

break;

default:

count=(high1)*number;

break;

}

number=number*10;

}

System.out.println(count);

}

2

f(n)=n;

编程之美上得大数存储比较麻烦

至于10的11次方很大数,超出long long 范围,所以需要大数存储,利用字符串解决

该方法需要读者自己解析

现在只验证一下编程之美上给出的结果(c)

1111111110

#include <iostream>

using namespace std;

int main()

编程之美 txt_编程之美_编程之美 pdf

{

long long int low;//注意越界问题

long long int mid;

long long int high;

long long int number = 1;

long long int n=1111111110;

long long int count = 0;//1的计数

while(n/number!=0)

{

low=n-(n/number)*number;

mid=(n/number)%10;

high=n/(number*10);

switch(mid)

{

case 0:

count=high*number;

break;

case 1:

count=high*numberlow1;

break;

default:

count=(high1)*number;

break;

}

number*=10;

}

if(count==n)

{

cout<<count<<endl;

}

return 0;

}


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-31384-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 李花蕾
      李花蕾

      美军刚出发就有中军舰尾随

    热点图片
    拼命载入中...