基于bash的shell脚本实现, 直接在linux系统执行该脚本即可在当前目录生成目标源文件'happy.c`, 可通过入参指定代码量.
#!/bin/bash
# 给出一个不多于5位的正整数, 要求
# 1. 求出他是几位数
# 2. 分别输出每一位数
# 3. 按逆序输出各位数字, 例如原数为5631, 应输出1365
g_argv=$1
g_map=(个 十 百 千 万)
g_target_file="./happy.c"
g_target_head=\
"#include <stdio.h>
int main(int argc, char *argv[]) {
int num;
printf(\"请给出一个不多于五位数的正整数:\\\\n\");
scanf(\"%d\", &num);
switch (num) {
"
g_target_tail=\
" default:
printf(\"非法输入\\\\n\");
}
return 0;
}
"
# 中间内容:
# case 1:
# printf("是%d位数\n", 1);
# printf("个位数是: %d\n", 1);
# printf("倒过来是: %d\n", 1);
# break;
function solution() {
local num=$1
local cur=0
local len=0
local line=""
local reverse=""
while [[ $num -ne 0 ]]; do
cur=$(($num % 10))
num=$(($num / 10))
line="${line}\n printf(\"${g_map[$len]}位数是: %d\\\\n\", ${cur});"
reverse=${reverse}${cur}
let len++
done
reverse=$(echo ${reverse} | sed "s/^0*//g")
echo -e " case ${1}:" >> ${g_target_file}
echo -e " printf(\"是%d位数\\\\n\", ${len});${line}" >> ${g_target_file}
echo -e " printf(\"倒过来是: %d\\\\n\", ${reverse});" >> ${g_target_file}
echo -e " break;" >> ${g_target_file}
}
function main() {
echo -e "${g_target_head}" > ${g_target_file}
for i in $(seq 1 ${g_argv:=99999}); do
solution $i
done
echo -e "${g_target_tail}" >> ${g_target_file}
}
main
Q.E.D.