備戰藍橋杯決賽----堅持第七天!!!
阿新 • • 發佈:2019-02-12
今天的目標是刷真題,看看國賽題目的難度。四道題目,其中三道根本看不懂,就算是看其他人寫的程式碼,也不是很明白,而且這四道題目是B組題,想想我那國賽A組題,那難度比這還要高一個檔次啊!!!內心是崩潰的,也許我這兩週小突破,不足以讓我提升很多,還剩最後七天,我更應該在基礎的知識點還有心態上下功夫,如果像現在這個樣子,肯定直接gg。。
說一下今天唯一解出來的題目。
問題描述 我們知道,整數做除法時,有時得到有限小數,有時得到無限迴圈小數。如果我們把有限小數的末尾加上無限多個0,它們就有了統一的形式。
本題的任務是:在上面的約定下,求整數除法小數點後的第n位開始的3位數。輸入格式 一行三個整數:a b n,用空格分開。a是被除數,b是除數,n是所求的小數後位置(0<a,b,n<1000000000)輸出格式 一行3位數字,表示:a除以b,小數後第n位開始的3位數字。樣例輸入1 8 1樣例輸出125樣例輸入1 8 3樣例輸出500樣例輸入282866 999000 6樣例輸出
914
我知道這題目很簡單,但也是在我看了別人程式碼之後才懂得,對於小數點後的每一位,我並沒有第一時間想到非常巧妙的迴圈求解的方法,
而且在這題目中,對他的for迴圈剛開始沒有理解,浪費了一點時間,最後才發現是輸出三位,所以大家一定要看清題目。
程式碼:
剩下的沒有看懂的題目,我也會再研究,慢慢補上,今天的腦力實在是不夠了。。。#include <iostream> using namespace std; int main() { long long i,a,b,t,n; cin>>a>>b>>n; a=a%b; while(n-10>0) //目的是快速逼近小數點後第n位的位置,避免超時 { a*=1e10; a%=b; n-=10; } for(i=0;i<n+2;i++) //注意這裡的for迴圈範圍與下面的if判斷結合,正好輸出的是三位 { a*=10; //巧妙的算出每一位,僅利用a*=10與a%=b即可 if(i>=n-1) cout<<a/b; a%=b; } return 0; }