1. 程式人生 > >洛谷——P2368 EXCEEDED WARNING B

洛谷——P2368 EXCEEDED WARNING B

輸入格式 。。 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
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