結果

問題 No.500 階乗電卓
ユーザー Kmcode1Kmcode1
提出日時 2017-04-07 23:08:49
言語 C++11
(gcc 13.3.0)
結果
AC  
実行時間 2 ms / 2,000 ms
コード長 2,696 bytes
コンパイル時間 1,456 ms
コンパイル使用メモリ 164,972 KB
実行使用メモリ 5,376 KB
最終ジャッジ日時 2024-06-25 02:53:08
合計ジャッジ時間 2,243 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 20
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:135:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  135 |         scanf("%lld", &n);
      |         ~~~~~^~~~~~~~~~~~

ソースコード

diff #
プレゼンテーションモードにする

#include<bits/stdc++.h>
#include<unordered_set>
#include<unordered_map>
using namespace std;
long long int n;
string cur;
void MOD(){
reverse(cur.begin(), cur.end());
while (cur.size() > 12){
cur.pop_back();
}
reverse(cur.begin(), cur.end());
}
bool check(){
for (int i = 0; i < cur.size(); i++){
if (cur[i] == '0'){
}
else{
return false;
}
}
return true;
}
string pluss(string a, string b, bool flag = false){
if (!flag){
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
}
if (a.size() > b.size()){
swap(a, b);
}
string ans;
ans.clear();
long long int want = 0;
for (int i = 0; i < a.size(); i++){
long long int val = a[i] - '0';
val += b[i] - '0';
val += want;
want = val / 10LL;
val %= 10LL;
ans.push_back(val + '0');
}
for (int j = a.size(); j < b.size(); j++){
long long int val = 0;
val += b[j] - '0';
val += want;
want = val / 10LL;
val %= 10LL;
ans.push_back(val + '0');
}
while (want){
ans.push_back(want % 10 + '0');
want /= 10;
}
if (!flag){
reverse(ans.begin(), ans.end());
}
if (ans.size() == 0)ans = "0";
return ans;
}
string mult(string a, string b, bool flag = false){
if (!flag){
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
}
string ans = "0";
string pas;
string kari;
pas.clear();
for (int i = 0; i < b.size(); i++){
long long int bb = b[i] - '0';
long long int tmp = 0;
kari = pas;
for (int j = 0; j < a.size(); j++){
long long int val = (long long int)(a[j] - '0')*bb;
val += tmp;
tmp = val / 10LL;
val %= 10LL;
kari.push_back(val + '0');
}
while (tmp){
kari.push_back((tmp % 10LL) + '0');
tmp /= 10LL;
}
ans = pluss(ans, kari, true);
//end
pas.push_back('0');
}
if (!flag){
reverse(ans.begin(), ans.end());
}
if (ans.size() == 0)ans = "0";
return ans;
}
string minuss(string a, string b){
reverse(b.begin(), b.end());
reverse(a.begin(), a.end());
while (a.size()>b.size()){
b.push_back('0');
}
while (a.size()<b.size()){
a.push_back('0');
}
bool carry = false;
for (int i = 0; i<a.size(); i++){
if (a[i] != '0'&&carry){
a[i]--;
carry = false;
}
if (a[i] == '0'&&carry){
a[i] = '9';
}
if (a[i] >= b[i]){
a[i] = (a[i] - '0') - (b[i] - '0') + '0';
}
else{
a[i] = (10 + (a[i] - '0') - (b[i] - '0')) + '0';
carry = true;
}
}
while (a.size()>1 && a.back() == '0'){
a.pop_back();
}
reverse(a.begin(), a.end());
return a;
}
int main(){
scanf("%lld", &n);
cur = "1";
for (long long int i = 2; i <= n; i++){
stringstream ss;
ss << i;
string k;
ss >> k;
cur = mult(cur, k);
MOD();
if (check()){
break;
}
}
MOD();
cout << cur << endl;
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0