問題1
http://d.hatena.ne.jp/cocoatomo/20090329/1238295371 の続きです。ちょこっとだけ改良を加えました。
#include <stdio.h> #include <stdlib.h> int solveVer00(int, int, int); int solveVer01(int, int, int); int sumOfMultiples(int, int); /** * 0 以上 ceiling 未満の num1, num2 の倍数の合計を求める関数. */ int solveVer00(int num1, int num2, int ceiling) { int i; int sum; for (i = 1, sum = 0; i < ceiling; i++) { if (i % num1 == 0 || i % num2 == 0) { sum += i; } } return sum; } /** * 0 以上 ceiling 未満の num の倍数の合計を求める関数. */ int sumOfMultiples(int num, int ceiling) { int numOfNum; numOfNum = (ceiling - 1) / num; return numOfNum * (numOfNum + 1) * num / 2; } int solveVer01(int num1, int num2, int ceiling) { return sumOfMultiples(num1, ceiling) + sumOfMultiples(num2, ceiling) - sumOfMultiples(num1 * num2, ceiling); } int main(int argc, char **argv) { int version; if (argc == 1) { version = 0; } else { version = atoi(argv[1]); } switch (version) { case 0: printf("Solution: %d\n", solveVer00(3, 5, 1000)); break; case 1: printf("Solution: %d\n", solveVer01(3, 5, 1000)); break; default: break; } return 0; }