洛谷——P2368 EXCEEDED WARNING B
阿新 • • 發佈:2017-11-19
輸入格式 。。 str get ios string 我們 reg copy
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 usingnamespace 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