65,209
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <cmath>
using namespace std;
int titleToNumber(string s) {
int n = 0, len = s.length();
for(int i = 0; i < s.length(); ++ i) {
char c = s[i];
int chara = c - 'A' + 1;
cout<<"chara = " << chara << endl;
n += chara * pow(26, len - 1 - i);
cout<<"pow = " << pow(26.0, len - 1 - i) << endl;
cout<<"n = " << n << endl;
cout<<endl;
}
return n;
}
int main() {
cout<<titleToNumber("AAB");
return 0;
}
[/quote]
加上后我这CB最后结果就是704了,一切后VS一样了

非常感谢。
一开始您给的学习路线图很赞,也反应了我这课程的各种不合理:一开始大一就是C++,没有C也没有计算机导论;然后大二是数据结构和数据库;大三是操作系统、组成原理、计算机网络;大四没课。
要好好补补汇编、编译原理、正则这些了。
理解和讨论之前请先学会如何观察!
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
对学习编程者的忠告:
多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程!
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步Debug版对应汇编一行!
单步Debug版对应汇编千行不如单步Release版对应汇编一行!
不会单步Release版对应汇编?在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有,然后在IDE中运行。(一般人我不告诉他!
)
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
#include <iostream>
#include <cmath>
using namespace std;
double titleToNumber(string s) {
double n = 0, len = s.length();
for(int i = 0; i < s.length(); ++ i) {
char c = s[i];
double chara = c - 'A' + 1;
double a = len - 1 - i;
n += chara * pow(26.0, a);
}
return n;
}
int main() {
cout<<titleToNumber("AAB");
return 0;
}
用double的话是OK的,问题还是上一楼回答的,两个编译器内部是如何走的……
#include <stdio.h>
#include <math.h>
int main() {
int n=0,m=3;
n=pow(26,2);
printf("pow(26,2)=%d\n",n);
n=pow(26.0,2.0);
printf("pow(26.0,2)=%d\n",n);
n=pow(26,m-1);
printf("pow(26,int(2))=%d\n",n);
n=pow(26.0,m-1);
printf("pow(26.0,int(2))=%d\n",n);
return 0;
}
在c++结果不同 是函数匹配的问题么
int m=3; void A(int* x){*x=pow(26,m-1);}
void B(float *y){*y=pow(26,m-1); }
(A) (B)
pushl %ebp pushl %ebp
movl %esp, %ebp movl %esp, %ebp
subl $40, %esp subl $40, %esp
movl _m, %eax movl _m, %eax
subl $1, %eax subl $1, %eax
movl %eax, -20(%ebp) movl %eax, -16(%ebp)
fildl -20(%ebp) fildl -16(%ebp)
fstpl 8(%esp) fstpl 8(%esp)
fldl LC0 fldl LC0
fstpl (%esp) fstpl (%esp)
call _pow call _pow
fnstcw -10(%ebp) fstps -12(%ebp)
movzwl -10(%ebp), %eax flds -12(%ebp)
movb $12, %ah movl 8(%ebp), %eax
movw %ax, -12(%ebp) fstps (%eax)
fldcw -12(%ebp) nop
fistpl -16(%ebp) leave
fldcw -10(%ebp) ret
movl -16(%ebp), %edx
movl 8(%ebp), %eax
movl %edx, (%eax)
nop
leave
ret
看汇编代码的话 好像函数调用是一样的 就是转换的问题了