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

洛谷——P2368 EXCEEDED WARNING B

时间:2017-11-19 12:29:39      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:ios   sum   mat   include   sam   多少   输入格式   stream   names   

P2368 EXCEEDED WARNING B

题目背景

SGU 107

题目描述

求有多少个平方后末尾为987654321的n位数

输入输出格式

输入格式:

 

整数n

 

输出格式:

 

答案,即[b]“平方后末尾为987654321的n位数”[/b]的个数

 

输入输出样例

输入样例#1: 复制
8
输出样例#1: 复制
0

说明

1≤n≤1 000 000

[b][color=#767676]不要问我暴力能过几个点,我只想说呵呵。[/color][/b]

 

打表找规律

我们可以发现,当n小于等于8的时候,ans全都等于0

当n=9的时候ans全都等于8

然后我们有知道乘积的最后n位数的大小只与两个相乘的数的后n数的大小有关,因此我们要计算平方后后9位数位。。。的数的个数,那么这些数只要后九位数的平方为我们要求的数就好了,然后我们可以看到,多余的每位上的数最高位有9种取法,其他的位上有10种取法,因此公式即为9*8*(10^n-(9+1))

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 987654321
using namespace std;
int n,ans;
long long sum;
int read()
{
    int x=0,f=1; char ch=getchar();
    while(ch<0||ch>9){if(ch==-)f=-1;ch=getchar();}
    while(ch>=0&&ch<=9) x=x*10+ch-0,ch=getchar();
    return x*f;
}
int main()
{
    n=read();
    if(n<=8) ans=0;
    else 
     if(n==9) ans=8;
     else ans=8*9; 
    printf("%d",ans);
    for(int i=1;i<=n-10;i++) printf("0");
}

 

洛谷——P2368 EXCEEDED WARNING B

标签:ios   sum   mat   include   sam   多少   输入格式   stream   names   

原文地址:http://www.cnblogs.com/z360/p/7859299.html

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