結果
| 問題 | No.500 階乗電卓 |
| コンテスト | |
| ユーザー |
Kmcode1
|
| 提出日時 | 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);
| ~~~~~^~~~~~~~~~~~
ソースコード
#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;
}
Kmcode1