
如果你是一个想转行c的python学者。又或是一个喜欢恶搞的c学者。这篇文章可能是自你知道c开始最令人震惊的东西。看看这个吧#includeiostream#includefstream#includecstdlibintmain(){std::string py_codeR(# -*- coding: gbk -*- print(这是Python代码由C调用) a 100 200 print(计算结果,a) );std::ofstreamtmp(temp.py);tmppy_code;tmp.close();intretstd::system(py temp.py);returnret;}想必无论你是学c的还是学python的看到这个都有不少感触吧。没错你可以在c编译器里写python代码。#includeiostream#includefstream#includecstdlibintmain(){std::string py_codeR(# -*- coding: gbk -*- );std::ofstreamtmp(temp.py);tmppy_code;tmp.close();intretstd::system(py temp.py);returnret;}这是c框架然后你只要在里面写python代码就能直接运行。这个东西有时候很好用比如这道题很明显是一道高精度。众所周知c写高精度极为麻烦#includeiostream#includestring#includecstringusingnamespacestd;constintMAXN505;// 最多500位预留505防止进位多一位inta[MAXN],b[MAXN],ans[MAXN];string s1,s2;intlen1,len2,len_ans;intcarry;// 进位intmain(){// 1. 读取两个大数字字符串cins1s2;len1s1.size();len2s2.size();// 2. 逆序存入数组下标0是个位for(inti0;ilen1;i){a[i]s1[len1-1-i]-0;}for(inti0;ilen2;i){b[i]s2[len2-1-i]-0;}// 3. 逐位加法循环到最长数字长度carry0;len_ansmax(len1,len2);for(inti0;ilen_ans;i){intsuma[i]b[i]carry;ans[i]sum%10;carrysum/10;}// 4. 处理最高位剩余进位if(carry!0){ans[len_ans]carry;len_ans;}// 5. 逆序输出从最高位打印到个位for(intilen_ans-1;i0;i--){coutans[i];}coutendl;return0;}但是python写这道题直接一行搞定print(int(input())int(input()))于是我们可以把这个放进我们的框架里。即#includeiostream#includefstream#includecstdlibintmain(){std::string py_codeR(# -*- coding: gbk -*- print(int(input()) int(input())) );std::ofstreamtmp(temp.py);tmppy_code;tmp.close();intretstd::system(py temp.py);returnret;}//哈哈再也不会被学python的嘲笑啦这可不是减少了一点点万能框架一套要写的其实也只有那一行。接下来我来讲一讲原理这段代码其实是把python存入temp脚本然后再启动 Python 解释器运行刚刚生成的temp.py脚本。所以运行完后桌面上会多出一个 temp.py 。可能要手动删除若运行发生错误给出以下修复方案1. 在程序最顶端加上#includestring2. 若未安装python见 python https://www.python.org/downloads/windows/ 选择 3.10/3.11 稳定版或者在应用商店安装。3. 若程序依然无法运行请检查python语法是否正确4. 若仍运行出错尝试将代码intretstd::system(py temp.py);改为intretstd::system(python temp.py);后再次运行。若程序显示请立即改回intretstd::system(py temp.py);6.若还是不行本人也无能为力了希望本文能为大家带来启发。本文到这里就结束了。感谢大家的浏览若有补充请在评论区指出。