I've been programming for over 30 years. I've been programming in C or C++ for about 24 years.
As others have said, problem solving and logical thinking are really the key skills. If you have the abstract thinking skills for advanced math, you're in good shape. I took a year of Calculus because it was required for the Comp Sci degree, and other than one brief project I've never used it. But I think it was important to take because it was part of mastering math. The concepts come into play in ways you don't expect.
There are ways in which programming is like a geometric proof. It is a logical progression of steps in which what you're doing now depends on everything that has come before and sets up everything you'll do from here on out.
Somewhere around 10 years of programming every day I got to where I felt like I wrote really good, correct code all the time. It got to where if it compiled without error, I could be about 90% sure it would just work.
Programming languages are like spoken languages. With a spoken language you eventually get to where you don't have to think about what you're hearing or saying. It just makes sense. English is my first language. When I speak or write English I'm not thinking of how to spell every word or how to word every sentence or how to put a paragraph together to express a point in my argument. I simply have a concept I want to get across and I use language to do it without thinking about it.
Programming for me is the same way. I'm at the point where when I write code I'm not thinking about programming. I'm thinking about the problem and what I need to do to solve it. I don't have to think about whether my loop terminates on the right conditions, or if that function has any side effects, or whether what I'm doing should be put into a function or should be part of a new class.
I don't have constant headaches, any more than you talking about what you did over the summer gives you a headache. It's not about problems and solutions so much as just doing what needs to be done.
Anyway I don't know if this helps but I wanted to give you some perspective from the distant future. I actually quit a job where I left about a quarter million dollars on the table in stock options so that I could get out of managing programmers and back into being a programmer. I think programming is incredibly rewarding and definitely fun.
Don't get your sights set on one company. It's unlikely Google will be Google by the time you graduate from college. There will be something else. Don't be afraid to take a good job doing something other than your dream job. You need the experience. Then just keep working toward your goals.