Project Euler 题解 #20 Factorial digit sum

2024-04-06 05:38

本文主要是介绍Project Euler 题解 #20 Factorial digit sum,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:Factorial digit sum

n! means n × (n− 1)× ...× 3× 2× 1

For example, 10! = 10 × 9× ...× 3× 2× 1 = 3628800,
and the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.

Find the sum of the digits in the number 100!

这个题目就是大数乘法,直接上代码。

代码实现

//https://projecteuler.net/problem=20
//Factorial digit sum
#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
#define  MAX_LEN  1024 //数字串的最大长度
//该函数不能交换同一个地址上的值, 否则, 会将a b置0
template <class T> void Swap(T& a, T& b) 
{
if (&a == &b)
{
return;
}
a ^= b ^= a ^= b;
}
void MUL(char str1[], char str2[], char result[])
{
int len1 = strlen(str1), len2 = strlen(str2);
int index = 0, carry = 0, temp = 0;;
for (int i1 = len1 - 1; i1 >= 0; --i1)
{
index = len1 - 1 - i1;
for (int i2 = len2 - 1; i2 >= 0; --i2)
{
temp = (result[index] - '0') + (str1[i1] - '0') * (str2[i2] - '0') + carry;
result[index] = temp%10 + '0';
carry = temp/10;
++index;
}
if (carry > 0)
{
result[index] = (result[index] - '0') + carry + '0';
carry = 0;
++index;
}
}
//去掉结果数字串中前面的0
while (result[index] == '0' && index > 0)
{
--index;
}
result[++index] = '\0';
int i =0, j = index - 1;
while(i < j)
{
Swap(result[i], result[j]);
++i;
--j;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int N = 100;
char product[MAX_LEN] = "1";
for (int i = 1; i <= N; ++i)
{
char mult[MAX_LEN] = {0};
sprintf_s(mult, MAX_LEN, "%d", i);
char result[MAX_LEN];
memset(result, '0', MAX_LEN);
MUL(product, mult, result);
memcpy_s(product, MAX_LEN, result, MAX_LEN);
}
int sum = 0;
for (int i = 0; i < strlen(product); ++i)
{
cout<<product[i];
sum += product[i] - '0';
}
cout<<endl;
cout<<"sum = "<<sum<<endl;
system("pause");
return 0;
}

输出结果:

这篇关于Project Euler 题解 #20 Factorial digit sum的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/879134

相关文章

idea中project的显示问题及解决

《idea中project的显示问题及解决》:本文主要介绍idea中project的显示问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录idea中project的显示问题清除配置重China编程新生成配置总结idea中project的显示问题新建空的pr

PyTorch中cdist和sum函数使用示例详解

《PyTorch中cdist和sum函数使用示例详解》torch.cdist是PyTorch中用于计算**两个张量之间的成对距离(pairwisedistance)**的函数,常用于点云处理、图神经网... 目录基本语法输出示例1. 简单的 2D 欧几里得距离2. 批量形式(3D Tensor)3. 使用不

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

最大流=最小割=最小点权覆盖集=sum-最大点权独立集

二分图最小点覆盖和最大独立集都可以转化为最大匹配求解。 在这个基础上,把每个点赋予一个非负的权值,这两个问题就转化为:二分图最小点权覆盖和二分图最大点权独立集。   二分图最小点权覆盖     从x或者y集合中选取一些点,使这些点覆盖所有的边,并且选出来的点的权值尽可能小。 建模:     原二分图中的边(u,v)替换为容量为INF的有向边(u,v),设立源点s和汇点t

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

【JavaScript】LeetCode:16-20

文章目录 16 无重复字符的最长字串17 找到字符串中所有字母异位词18 和为K的子数组19 滑动窗口最大值20 最小覆盖字串 16 无重复字符的最长字串 滑动窗口 + 哈希表这里用哈希集合Set()实现。左指针i,右指针j,从头遍历数组,若j指针指向的元素不在set中,则加入该元素,否则更新结果res,删除集合中i指针指向的元素,进入下一轮循环。 /*** @param

C - Word Ladder题解

C - Word Ladder 题解 解题思路: 先输入两个字符串S 和t 然后在S和T中寻找有多少个字符不同的个数(也就是需要变换多少次) 开始替换时: tips: 字符串下标以0开始 我们定义两个变量a和b,用于记录当前遍历到的字符 首先是判断:如果这时a已经==b了,那么就跳过,不用管; 如果a大于b的话:那么我们就让s中的第i项替换成b,接着就直接输出S就行了。 这样

【秋招笔试】9.07米哈游秋招改编题-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新 🍄 题面描述等均已改编,如果和你笔试题看到的题面描述